LEDs über SBUS ansteuern, Problem mit SBUS-Signal

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.

Vom SBUS habe ich keine Ahnung :frowning:

Die überzähligen Werte gehören zu map(), siehe auskommentierten Code mit getNormalizedChannel() weiter oben.

Wie die Werte in Deine Variablen i, thr usw. kommen sollen ist mir völlig schleierhaft. Wieso nimmst Du nicht auch getNormalizedChannel()?

Ich muss ja die Funktionen thr und i und ledlow irgendwo zuordnen. dies geschieht ja mit dem thr = sbus.getNormalizedChannel()
Wenn ich jetzt die anderen Werte weglasse und auch das map, dann bin ich immer noch gleich weit. Einzig dass das LED anders leuchted (blauweiss, anstelle von gelb)
Hab nun noch mit der Baudrate herumgespielt, aber auch dann hab ich immer noch das selbe Problem.

Oder wäre es möglich, dass er mir die Library vom SBUS.h nicht auf den Nano schreibt? Sollte er ja eigentlich wenn ich den ja inkludiere.

Wenn ich wenigstens prüfen könnte ob die Signale ankommen am Nano.

Heizi:
Den SBUS Inverter lasse ich weg, da ich ein uninvertiertes Signal direkt abgreifen kann.

Bist Du sicher, dass die Polarität des Signals stimmt?

MicroBahner:
Bist Du sicher, dass die Polarität des Signals stimmt?

So langsam beginne ich daran auch zu zweifeln

Heizi:
Ich muss ja die Funktionen thr und i und ledlow irgendwo zuordnen. dies geschieht ja mit dem thr = sbus.getNormalizedChannel()

Aufwachen! Diese Aufrufe sind auskommentiert :frowning:

DrDiettrich:
Aufwachen! Diese Aufrufe sind auskommentiert :frowning:

ja aber nicht im originalen Code. In meiner abgeänderten Variante ja, aber dort benutze ich ja was anderes um die Channels zu holen.

Aber es funktionieren ja beide Varianten nicht.

Warum Deine abgeänderte Version nicht funktionieren kann, habe ich ja schon geschrieben. Was möchtest Du als nächstes falsch machen?

DrDiettrich:
Warum Deine abgeänderte Version nicht funktionieren kann, habe ich ja schon geschrieben. Was möchtest Du als nächstes falsch machen?

Die einen Aufrufe waren auskommentiert, weil ich darunter einen anderen Aufruf geschrieben habe. Für die andere Lib. Da mit der neuen Lib der Aufruf vom original nicht funktioniert, da er die Befehler gar nicht kennt. Da ich am rumbasteln war hab ich den Code stehen lassen anstelle diesen zu löschen.

Aber anyway... habs hinbekommen.
Hab mir einen neuen Inverter gebastelt (diesmal mit anderen Widerständen) und das normale Signal verwendet. Danach hat plötzlich funktioniert.
Die LEDs flackern zwar ab und zu, das scheint aber eher an der Verbindung und dem Signal der Fernsteuerung zu liegen. Aber ansonsten läufts.