Hallo zusammen,
ich bin gerade an einem Projekt, welches ich online gefunden habe. Und zwar geht es darum. dass ich mit meiner FrSky und einem XSR-Empfänger (SBUS) LEDs ansteuern kann. Die LEDs sollten die Farbe ändern können (Potentiometer CH10 auf meiner FrSky) oder die Intensität meines Gassticks (CH3) anzeigen, sowie die LEDs Ein/Aus zu schalten (CH6). Verwendet wird ein Arduino Nano.
Das ganze habe ich soweit aufgebaut und verdrahtet. Den SBUS Inverter lasse ich weg, da ich ein uninvertiertes Signal direkt abgreifen kann. Die Umschaltung der Modis und auf den "passiv"-Modus funktionieren, die LEDs funktioniere auch. Jedoch scheint der SBUS nicht zu funktioneren. Angeschlossen ist dieser auf dem RX Port des Nanos. Die LED vom RX leuchtet bzw flackert auf dem Nano, somit müsste ja ein Signal ankommen. Darum vermute ich, dass etwas mit dem Code nicht stimmt
Verwendet habe ich diesen Code:
https://pastebin.com/raw/vehQTdev
Als Library wurde folgende verwendet: GitHub - zendes/SBUS: Arduino library for the Futaba SBUS protocol
Nun habe ich versucht das ganze mit dieser Library GitHub - bolderflight/sbus: Arduino and CMake library for communicating with SBUS receivers and servos. umzuschreiben. In einem anderen Projekt hat jemand mit einem FrSky Empfänger diese Library verwendet, was mich dazu bewegte diese ebenfalls zu versuchen. Dazu habe ich einfach die Zeilen für den SBUS abgeändert:
//============================================================
// SBUS things
//============================================================
if (sbusmode == 1)
{
// sbus.process();
int i;
int thr;
int thrV;
int ledlow;
int function;
// i = map(sbus.getNormalizedChannel(9), 71, -64, 0, 255);
//i = sbus.getNormalizedChannel(9);
// thr = map(sbus.getNormalizedChannel(2), -80, 82, 0, 17);
// thrV = map(sbus.getNormalizedChannel(2), -80, 82, 0, 255);
//thr = sbus.getNormalizedChannel(2);
// ledlow = sbus.getNormalizedChannel(5);
float channels[16];
bool failSafe;
bool lostFrame;
if(sbus.readCal(&channels[9], &failSafe, &lostFrame)){
Serial.println(i);
}
if(sbus.readCal(&channels[2], &failSafe, &lostFrame)){
Serial.println(thr);
}
if(sbus.readCal(&channels[2], &failSafe, &lostFrame)){
Serial.println(thrV);
}
if(sbus.readCal(&channels[5], &failSafe, &lostFrame)){
Serial.println(ledlow);
}
#ifdef debug
Serial.print("i:");
Serial.print(i, 71, -64, 0, 255);
Serial.print(" thr:");
Serial.print(thr, -80, 82, 0, 17);
Serial.print(" ledlow:");
Serial.print(ledlow);
Serial.print(" b:");
Serial.print(b);
Serial.print(" u:");
Serial.println(u);
#endif
Scheint aber auch nicht zu funktionieren. Vermute aber, dass etwas mit dem Code nicht ganz korrekt ist. Zudem Frage ich mich, für das die Zahlen nach dem Serial.print(i, 71, -64, 0, 255) sind? Wenn ich diese Zahlen oben eintrage, dann gibt mir der IDE ein Fehler aus.
Die Channels hier habe ich immer eins tiefer angegeben, als die, die ich nutze. Da CH0 im Progamm ja CH1 ist. Somit ist CH2 im Programm CH3 (Gas). Oder verstehe ich das falsch?
Wenn ich den ersten Code verwende, dann sind die LEDs beim Einschalten gelb (Modus 1, Farbwechseln). Im Modus 2 (Gasindikator) sind diese aus, da Gasstick in 0 Stellung. Im Modus 3 (Farbwechsel + Gasintensität) sind diese wieder gelb, aber etwas weniger hell. Wenn ich meinen Code verwende, dann leuchten die LEDs gar nicht mehr (ausser im "passiv"-Modus)
Eventuell muss ich eine andere Library verwenden? Habe diese noch gefunden: Futaba S-BUS controlled by mbed | Mbed
Ich hoffe jemand kann mir sagen, wo mein Fehler liegt oder gleich helfen diesen auszubessern.