Hi, I am not 100% sure if this is the right forum to ask this but I need a quick solution to this problem.
I am a grade 9 student and my final building project for the year is to build some sort of toy. So what I have decided to do is to make a RC helicopter out of recycled materials to cut down the costs. I am using an arduino UNO as it's processor, an FRSKY XM+ MICRO D16 SBUS FULL RANGE RECEIVER UP TO 16CH as a receiver and a Taranis QX7 as a transmitter.
I have successfully gotten the receiver to talk to the arduino UNO and it is displaying the correct values, but the problem I am encountering is at random the values suddenly change. When the stick of the transmitter is positioned in the middle the code in the serial monitor reads (1500) , just as it should be. But about every 14 frames the value suddenly jumps from 1500 to 957. And then immediately goes back to 1500 again and after another delay it jumps back to 957 again. Which isn't really a big deal with the motors but the servo's jerk around like crazy. Any ideas what the problem is? as far as I can tell there is nothing wrong with my code and the receiver is working fine.
Code:
#include <sbus.h>
#include <Servo.h>
// used pins
#define SBUS_PIN 3 // D3
#define SERVO_PIN 2 // D2
int motorControl = 5;
int Speed = 0;
SBUS sbus;
Servo servo1;
void setup() {
Serial.begin(115200);
sbus.begin(SBUS_PIN, sbusBlocking);
servo1.attach(SERVO_PIN);
pinMode(motorControl, OUTPUT);
analogWrite(motorControl, 0);
}
void loop() {
//analogWrite(motorControl, 10);
int sensorValue = sbus.getChannel(4);
Serial.println(sensorValue);
Speed = map(sensorValue, 988, 2011, 0, 179);
if (sbus.waitFrame()) {
servo1.write(Speed);
delay (50);
// analogWrite(motorControl, Speed);
}
delay(50);
}
(Circuit attached)