RC Servo auslesen

Ich habe ein kleines problem mit dem auslesen eines RC Servos, bzw. dessen signal. Das soll später mal einen Blinker bei einen Modellauto ergeben.

Ausgelesen habe ich mit den Sketch ( https://medium.com/@werneckpaiva/how-to-read-rc-receiver-signal-with-arduino-54e0447f6c3f )

da bekam ich werte wie folgt :
-2 = normal
95 = links
-95 = rechts

mein sketch fürs blinken sieht aus wie folgt :

https://pastebin.com/TZgAF0Gh

nach Links macht er was er soll, auch in der Mitte stellung klappt alles. Nur nach Rechts will er nicht blinken, jemand eine idee?

viele grüße :slight_smile:

aktiviere die Serielle Schnittstelle.

  • Druck dir die Werte nach dem Auslesen aus
  • Druck dir die Werte nach dem Map aus.
  • Checke ob du das bekommst was du glaubst
  • bringe deine if in Ordnung *)

Wenn das dich nicht weiterbringt:

  • formatiere deinen Sketch in der IDE durch drücken auf CTRL-T
  • Poste deinen nächsten Code hier im Forum in Code-Tags.
  • Poste den Serial Output damit wir sehen was du wirklich bekommst.

edit *)

void auswerten(int wert)
{
  Serial.print(wert);
  if (wert < -7)
  {
    Serial.println(F(" Richtung A"));
  }
  else if (wert <= 7)
  {
    // nix
    Serial.println(F(" nix"));
  }
  else
  {
    Serial.println(F(" Richtung B"));
  }
}

void setup() {
  Serial.begin(115200);

  auswerten(-10);
  auswerten(-7);
  auswerten(-5);
  auswerten(0);
  auswerten(5);
  auswerten(7);
  auswerten(10);
}


void loop() {
}

bringt

-10 Richtung A
-7 nix
-5 nix
0 nix
5 nix
7 nix
10 Richtung B

Muss gestehen ich bin ein Anfänger in der ganzen Sache, verstehe zwar einiges aber diese Sache “bring deine if Ordnung richtig” da wüsste ich nicht was genau daran verkehrt ist. Da mir die Erfahrung fehlt den Fehler zu sehen.

Wo genau füge ich deinen Sketch ein, oder ist es ein eigenständiger Sketch?

mein Beispiel ist ein eigenständiger Sketch.
Er zeigt nur die Reihenfolge der Abfragen und das fortsetzen mit else if.

aus meiner Sicht hast du 3 Möglichkeiten - links - nix - rechts
Genau diese 3 Möglichkeiten zeigt der Sketch.

Einbauen musst du es selber.

Das war die Frage, in meinen Sketch, sozusagen als Zusatz oder eigenständig für sich und ich füge lediglich den PIN dazu der ausgelesen werden soll :slight_smile:

in meinem Post standen 7 Punkte. Du hast dir jetzt einen rausgepickt.

Mach mal die anderen 6 Punkte dann verstehst du auch mein Demo-Progrämmchen.

1 Like

Hab glaub das falsche zum auslesen benutzt und etwas anderes gefunden, nun hab ich folgende werte ( nach diesen link https://www.theboredrobot.com/post/reading-values-from-an-rc-receiver-using-arduino )

Links : 1970
Mitte : 1530
Rechts : 1015

im Forum fand ich folgendes dazu https://forum.arduino.cc/t/map-befehl/536435

Blockquote ```
neuerWert = map(analogRead(A0), 0, 1023, 0, 100);

also auf meinen code umgesetzt würde es bedeuten:

von

> STEERING = map(STEERING, **890**, 1900, 100, -100);  //Create Values

zu

>   STEERING = map(STEERING, **1015**, 1900, 100, -100);  //Create Values

mache ich dieses jedoch, Blinken die Leds selbst in mittlerer position. Und auch nur wieder nach Links.

Code ist nun auch Formatiert.

Habs nun mit etwas ruhe und nachdenken auf einen anderen weg hinbekommen.

> void loop() {
>   STEERING = pulseIn(3, HIGH);  //measure PWM for STEERING
>   AUX1 = pulseIn(4, HIGH);      //measure PWM for AUX1
> 
> 
>   if (STEERING > 1600)  // Wenn Lenk und Gas Neutral sind
>   {
>         for (int fadeValue = 0; fadeValue <= 200; fadeValue = fadeValue + 10) {
>         // sets the value (range from 0 to 255):
>         analogWrite(ledPin2, fadeValue);
>         // wait for 30 milliseconds to see the dimming effect
>         delay(25);
>       }
> 
>       // fade out from max to min in increments of 5 points:
>       for (int fadeValue = 200; fadeValue >= 0; fadeValue = fadeValue - 10) {
>         // sets the value (range from 0 to 255):
>         analogWrite(ledPin2, fadeValue);
>         // wait for 30 milliseconds to see the dimming effect
>         delay(25);
>       }
>   }
> 
>   else  // Wenn Lenkung nicht Neutral ist mache folgendes:
>   {
>     analogWrite(ledPin2, LOW);
>   }
> 
>   if (STEERING < 1400)  // Wenn Lenk und Gas Neutral sind
>   {
>         for (int fadeValue = 0; fadeValue <= 200; fadeValue = fadeValue + 10) {
>         // sets the value (range from 0 to 255):
>         analogWrite(ledPin, fadeValue);
>         // wait for 30 milliseconds to see the dimming effect
>         delay(25);
>       }
> 
>       // fade out from max to min in increments of 5 points:
>       for (int fadeValue = 200; fadeValue >= 0; fadeValue = fadeValue - 10) {
>         // sets the value (range from 0 to 255):
>         analogWrite(ledPin, fadeValue);
>         // wait for 30 milliseconds to see the dimming effect
>         delay(25);
>       }
>   }
> 
>   else  // Wenn Lenkung nicht Neutral ist mache folgendes:
>   {
>     analogWrite(ledPin, LOW);
>   }

Mit den werten die ich ausgelesen habe, ohne Map funktion.
Funktioniert bisher sehr gut :slight_smile:

Eine kleinigkeit hätte ich dennoch gerne noch eingebaut, und zwar das die Blinker nicht immer gehen, sondern zufällig.

Im wahren leben blinkt man (leider) ja auch nicht bei jeder Lenkbewegung.

So gesehen ein Zufallsgenerator, geht das? ist das Umsetzbar?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.