So I had a setup where I had an R9DS RC receiver connected to a Librepilot CC3D with SBUS and I wanted to control two servos with an accessory channel switch on my transmitter. I needed the servos to trigger, but reversed to each other when I flipped the accessory switch on. I figured out it was pretty impossible to do on the CC3D, so here’s how I did it with an arduino nano. NOTE: The exact method I used only works when your receiver can output the channel on SBUS and PWM simultaneously, the arduino will listen to PWM.
byte PWM_PIN = 3;
int pwm_value;
void setup() {
pinMode(PWM_PIN, INPUT);
Serial.begin(115200);
}
void loop() {
pwm_value = pulseIn(PWM_PIN, HIGH);
Serial.println(pwm_value);
//delay(500);
}
Now you can determine what state the remote acessory switch is in with pulseIn. Here’s my use case:
{
#include <Servo.h>
Servo LeftServo; // create servo object to control a servo
Servo RightServo;
void setup() {
pinMode(3, INPUT);
LeftServo.attach(9); // attaches the servo on pin 9 to the servo object
RightServo.attach(10);
}
void OperateJaw(bool isOpen)
{
if(isOpen)
{
LeftServo.write(180);
RightServo.write(0);
}
else
{
LeftServo.write(0);
RightServo.write(180);
}
}
int pwm_value;
void loop() {
pwm_value = pulseIn(3, HIGH);
if(pwm_value > 1200)
openState = false;
else
openState = true;
OperateJaw(openState);
}