Bluetooth Car bewegt sich nicht

Hallo liebe Community,

ich versuche gerade einen "simplen" Code zu verändern, sodass mein Gefährt sich Vorwärts - Rückwärts - Links und Rechts bewegt.

Ich habe das folgende Set gekauft Bausatz 2WD Roboter Smart Car Arduino Kit | Roboter-Bausatz.de

Habe es auch anhand der angegebenen Verkabelung verkabelt. 12 V sind angeschlossen.

Zusätzlich habe ich ein HC-06 angeschlossen.

Der serielle Kontakt klappt schon. Per Seriellen Monitor werden die im App gedrückten Tasten angezeigt. Ich habe meinen Code anhand der angezeigten Buchstaben angepasst, aber dennoch passiert nichts weiter.


SoftwareSerial BlueTooth(8, 9); 
char BT_input; 

void setup() {
#define in1 11
#define in2 10
#define in3 5
#define in4 6
  BlueTooth.begin(9600);
  Serial.begin(9600);
}

void loop() {
  if (BlueTooth.available()) {
    BT_input = (BlueTooth.read());
    Serial.println(BT_input);
    if (BT_input == 'F') {
  analogWrite(in1, 150);
  analogWrite(in3, 150);
    } else if (BT_input == 'B') {
  analogWrite(in2, 150);
  analogWrite(in4, 150);
    } else if (BT_input == 'L') {
  analogWrite(in4, 150);
  analogWrite(in1, 150);  
    }else if (BT_input == 'R') {
  analogWrite(in3, 150);
  analogWrite(in2, 150);  
    }else if (BT_input == 'S') {
  analogWrite(in3, 0);
  analogWrite(in2, 0); 
  analogWrite(in1, 0);
  analogWrite(in4, 0); 
    }
  }
}

Ich bin ratlos, wieso es nicht geht.

Hallo,

tippst du Groß- oder Kleinbuchstaben ins Terminal?

an beiden Pins gleiche Analogwerte zu schreiben, ist das gleiche wie an beiden Pins HIGH(Wert 255) oder LOW (Wert 0) anzulegen: der Motor stoppt.
Einer dieser Pins müsste 0 sein und der andere bekommt den Analogwert zugewiesen => Motor dreht in eine Richtung.
Wenn man dann die 0/150-Werte an den Pins tauscht => Motor dreht in die andere Richtung.
Und um z.B. den Motor rechts nicht weiterlaufen zu lassen, wenn man nur den linken regeln möchte, sollte man in jeder if-Abfrage/bei jeder Richtungsänderung alle 4 Pins schreiben.

Da wäre ich aber auch verwirrt: Anschlussplan beschreibt Betrieb mit 2 Motoren an H-Brücke (2WD), die jeweils vorwärts und rückwärts drehen könnten.
Der Code zeigt allerdings einen Betrieb mit 4 Motoren (4WD), der nicht so ganz zum Anschlussplan passt ... oder hab ich da was missverstanden? :sweat_smile:

Hallo Geppi, danke für die Antwort :slight_smile:
Das kann tatsächlich sein. Ich bin noch ein absoluter Newbie, aber das irgendwas nicht richtig ist, hab ich bereits am Code gesehen. Wie müsste ich ihn für 2wd umstellen?

Moin @daria87 ,

die "defines" in Deinem Sketch entsprechen nicht den Daten, die man den PDF der von Dir verlinkten Webseite entnehmen kann... Damit ist eine exakte Hilfe schwierig.

Das Grundprinzip kannst Du hier mal anschauen (Beschreibung im Code):

https://wokwi.com/projects/430221921753138177

Sketch:

/*
  Forum: https://forum.arduino.cc/t/bluetooth-car-bewegt-sich-nicht/1379494
  Wokwi: https://wokwi.com/projects/430221921753138177

  ec2021
  2025/05/06

  Annahme: Zwei Motoren sind so mit in1 bis in4 verbunden, dass

            Motor1 bei in1 HIGH und in2 LOW -> "Vorwärts" dreht
            Motor2 bei in3 HIGH und in4 LOW -> "Vorwärts" dreht

  Vorwärts-Drehung wird durch die grüne Led, Rückwärts-Drehung durch die rote Led signalisiert.

  Vorwärts/Rückwärts/Links/Rechts jeweils in Fahrtrichtung gesehen

  Serielle Kommandos:
   F -> Forward -> Vorwärts
   B -> Backward -> Rückwärts
   L -> Left     -> Links
   R -> Right    -> Rechts
   S -> Stop     -> Stopp

  Die Routinen müssen ggf. entsprechend der realen Verdrahtung angepasst werden (oder die
  Verdrahtung dem Code ;-) )

*/

#define in1 11
#define in2 10
#define in3 5
#define in4 6

constexpr byte cVal {150};

char BT_input;

void setup() {
  Serial.begin(9600);
  Serial.println();
}

void loop() {
  if (Serial.available()) {
    BT_input = (Serial.read());
    Serial.println(BT_input);
    if (BT_input == 'F') {
      analogWrite(in1, cVal);
      analogWrite(in2, 0);
      analogWrite(in3, cVal);
      analogWrite(in4, 0);
    } else if (BT_input == 'B') {
      analogWrite(in1, 0);
      analogWrite(in2, cVal);
      analogWrite(in3, 0);
      analogWrite(in4, cVal);
    } else if (BT_input == 'L') {
      analogWrite(in1, 0);
      analogWrite(in2, cVal);
      analogWrite(in3, cVal);
      analogWrite(in4, 0);
    } else if (BT_input == 'R') {
      analogWrite(in1, cVal);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, cVal);
    } else if (BT_input == 'S') {
      analogWrite(in3, 0);
      analogWrite(in2, 0);
      analogWrite(in1, 0);
      analogWrite(in4, 0);
    }
  }
}

Das tatsächliche Verhalten Deines Fahrzeugs hängt von der Verdrahtung ab; also vorsichtig ausprobieren und den realen Gegebenheiten anpassen!

Viel Erfolg!
ec2021

1 Like

So wie @ec2021 hätte ich es auch vorgeschlagen.. :index_pointing_up:

...eventuell hilft auch noch dieses Tutorial zur Verwendung des beim Robo eingesetzten Motortreibers, um seine Funktionen mal ohne die ganzen anderen Features des Modells (Ultraschall-Sensor, Servo etc..) kennenzulernen.

Hallo zusammen, ich habe mal den Code als Grundlage genommen. Ich habe auch nochmal die Verkabelung überprüft und da stimmt alles.

#include <SoftwareSerial.h>

SoftwareSerial BlueTooth(8, 9);

#define in1 11
#define in2 10
#define in3 5
#define in4 6

constexpr byte cVal {150};

char BT_input;

void setup() {
  BlueTooth.begin(9600);
  Serial.begin(9600);
  
}

void loop() {
  if (BlueTooth.available()) {
    BT_input = (BlueTooth.read());
    Serial.println(BT_input);
    if (BT_input == 'F') {
      analogWrite(in1, cVal);
      analogWrite(in2, 0);
      analogWrite(in3, cVal);
      analogWrite(in4, 0);
    } else if (BT_input == 'B') {
      analogWrite(in1, 0);
      analogWrite(in2, cVal);
      analogWrite(in3, 0);
      analogWrite(in4, cVal);
    } else if (BT_input == 'L') {
      analogWrite(in1, 0);
      analogWrite(in2, cVal);
      analogWrite(in3, cVal);
      analogWrite(in4, 0);
    } else if (BT_input == 'R') {
      analogWrite(in1, cVal);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, cVal);
    } else if (BT_input == 'S') {
      analogWrite(in3, 0);
      analogWrite(in2, 0);
      analogWrite(in1, 0);
      analogWrite(in4, 0);
    } else {
      Serial.println("Error");
    }
  }
}

Die Bluetooth Verbindung steht und die entsprechenden Buchstaben werden auch im seriellen Monitor angezeigt. Aber in einem komischen Ablauf.

Wie können die lange Pausen zustande kommen bzw. was hat das zu bedeuten?

Ich habe auf EnA und EnB jumper. Lieber runter und so wie auf der Grafik verkabeln oder kann ich die drauf lassen?

Die o.a. Zeile gibt jeden Character aus, der empfangen wird und schließt die Ausgabe mit einem Zeilenumbruch ab. Wenn Deine seriellen Daten neben dem gewünschten Buchstaben noch ein CR (Carriage Return) und ein LF (Linefeed) beinhalten, sieht man diese sogenannte "Steuerzeichen" nicht, aber ihre Auswirkung auf die Ausgabe am seriellen Monitor.

Du kannst z.B. diese Steuerzeichen "wegfiltern", indem Du alle Zeichen deren ASCII Wert kleiner als das Leerzeichen ist, verwirfst:

 // ...
    BT_input = (BlueTooth.read());
    if (BT_input < ' ') return;
    Serial.println(BT_input);
// ...

Hier nur der relevante Ausschnitt aus der Loop.

Deine Fehlermeldung wäre hilfreicher, wenn Du das nicht gewünschte Zeichen ausgibst:

  Serial.print("Error: ");
  Serial.println(BT_input);

oder - wenn auch nicht druckbare Zeichen erwartet werden, gerne im Hex-Code:

  Serial.print("Error: ");
  Serial.println(BT_input,HEX);

Ok?

Gruß
ec2021

P.S.: Wenn Du Dich über den ASCII Code informieren willst, einfach im Netz suchen!

Beispiele:
https://www.seobility.net/de/wiki/ASCII-Code

https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange

https://de.wikipedia.org/wiki/Steuerzeichen

Also ich habe nun die Zeile mit dem return und dem HEX übernommen.Ich nutze mittlerweile CR/LF und bekomme beim Verbindungsaufbau mit dem Smartphone folgendes angezeigt

Bei Tastendruck im RC Controller passiert jetzt NICHTS mehr.

Bei den Anwendungen im Netz, bei denen eine Drehzahlregelung vorgesehen ist, habe ich Folgendes vorgefunden:

A) Mit Drehzahlregelung

  • in1/in2 sowie in3/in4 zur Vorgabe der Drehrichtung
  • enA, enB zur Drehzahlkontrolle

Bei Anwendungen, die stets mit "voller Fahrt" vor- oder zurückdrehen lassen, werden

B) "Volle Fahrt"

  • in1/in2 sowie in3/in4 zur Vorgabe der Drehrichtung sowie für Start/Stopp
  • enA, enB gejumpert

eingesetzt.

Ich bevorzuge Variante A , da sie dem grundsätzlichen Zweck der Enable-Pins entspricht und auch im Code eine klare Unterscheidung zwischen Richtungsschaltung und der Drehzahlsteuerung (inkl. Start/Stopp) sichtbar wird. Es belegt zwar zwei Pins mehr, benötigt aber für die Richtungs-Pins keine PWM-Pins.

Poste doch mal Deinen aktuellen Code ...

#include <SoftwareSerial.h>

SoftwareSerial BlueTooth(8, 9);

#define in1 11
#define in2 10
#define in3 5
#define in4 6

constexpr byte cVal {HIGH};

char BT_input;

void setup() {
  BlueTooth.begin(9600);
  Serial.begin(9600);
  
}

void loop() {
  if (BlueTooth.available()) {
    BT_input = (BlueTooth.read());
    if (BT_input < ' ') return;
   // Serial.println(BT_input);
    else if (BT_input == 'F') {
      digitalWrite(in1, cVal);
      digitalWrite(in2, LOW);
      digitalWrite(in3, cVal);
      digitalWrite(in4, LOW);
    } else if (BT_input == 'B') {
      digitalWrite(in1, LOW);
      digitalWrite(in2, cVal);
      digitalWrite(in3, LOW);
      digitalWrite(in4, cVal);
    } else if (BT_input == 'L') {
      digitalWrite(in1, LOW);
      digitalWrite(in2, cVal);
      digitalWrite(in3, cVal);
      digitalWrite(in4, LOW);
    } else if (BT_input == 'R') {
      digitalWrite(in1, cVal);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, cVal);
    } else if (BT_input == 'S') {
      digitalWrite(in3, LOW);
      digitalWrite(in2, LOW);
      digitalWrite(in1, LOW);
      digitalWrite(in4, LOW);
    } else {
     // Serial.println("Error");
      Serial.println(BT_input,HEX);
    }
  }
}

Vorher:

 if (BT_input == 'F') {

Jetzt:

 else if (BT_input == 'F') 

Finde den Unterschied ... :wink:

Lösch doch mal das "else" vor dem if ...

Danke :slight_smile:

Leider springt er jetzt wieder ins else obwohl er die Buchstaben richtig erkennt.

Nur mal eine Verständnisfrage.Wenn ich in meinem RC Controller eine Taste drücke, kann ich den Buchstaben im Monitor sehen. Bedeutet das jetzt er führt erst den IF Befehl aus und wenn ich den Knopf los lasse springt er ins else?

Dann stimmt i.d.R. irgendetwas mit der "Klammerung" nicht ...

Ich schicke Dir gleich mal eine neue Version, die ohne die (unsäglichen) else if's auskommt.

So, hier mal eine neue Version, zum Ausprobieren siehe Wokwi

https://wokwi.com/projects/430320504783019009

Neben der Aufteilung in Funktionen für Vorwärts/Rückwärts etc. wird die Auswertung der Kommandos in einer switch/case Struktur durchgeführt. Das ist übersichtlicher und vermeidet "Klammerprobleme".

Außerdem:

  • Die pinModes für digitalWrite werden auf Output (!) gesetzt
  • Die Kommandos können in Groß- aber auch Kleinbuchstaben eingegeben werden

Für Wokwi sind zwei Zeilen per #ifdef angepasst.

/*
  Forum: https://forum.arduino.cc/t/bluetooth-car-bewegt-sich-nicht/1379494
  Wokwi: https://wokwi.com/projects/430320504783019009

  ec2021
  2025/05/07

  Annahme: Zwei Motoren sind so mit in1 bis in4 verbunden, dass

            Motor1 bei in1 HIGH und in2 LOW -> "Vorwärts" dreht
            Motor2 bei in3 HIGH und in4 LOW -> "Vorwärts" dreht

  Vorwärts-Drehung wird durch die grüne Led, Rückwärts-Drehung durch die rote Led signalisiert.

  Vorwärts/Rückwärts/Links/Rechts jeweils in Fahrtrichtung gesehen

  Serielle Kommandos:
   F -> Forward -> Vorwärts
   B -> Backward -> Rückwärts
   L -> Left     -> Links
   R -> Right    -> Rechts
   S -> Stop     -> Stopp

  Die Routinen müssen ggf. entsprechend der realen Verdrahtung angepasst werden (oder die
  Verdrahtung dem Code ;-) )

*/

//#define WOKWI

#include <SoftwareSerial.h>

SoftwareSerial BlueTooth(8, 9);

#define in1 11
#define in2 10
#define in3 5
#define in4 6

char BT_input;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  BlueTooth.begin(9600);
  Serial.begin(9600);
  Serial.println();
}

void loop() {
#ifdef WOKWI
  if (Serial.available()) {
    BT_input = Serial.read();
#else
  if (BlueTooth.available()) {
    BT_input = BlueTooth.read();
#endif
    switch (BT_input) {
      case 'f':
      case 'F':
        forward();
        break;
      case 'b':
      case 'B':
        backward();
        break;
      case 'l':
      case 'L':
        turnLeft();
        break;
      case 'r':
      case 'R':
        turnRight();
        break;
      case 's':
      case 'S':
        stop();
        break;
      default:
        if (BT_input >= ' ') {
          Serial.println(BT_input, HEX);
        }
    }
  }
}

void setInPins(byte val1, byte val2, byte val3, byte val4, char Cmd) {
  digitalWrite(in1, val1);
  digitalWrite(in2, val2);
  digitalWrite(in3, val3);
  digitalWrite(in4, val4);
  Serial.println(Cmd);
}

void forward() {
  setInPins(HIGH, LOW, HIGH, LOW, 'F');
}

void backward() {
  setInPins(LOW, HIGH, LOW, HIGH, 'B');
}

void turnLeft() {
  setInPins(LOW, HIGH, HIGH, LOW, 'L');
}

void turnRight() {
  setInPins(HIGH, LOW, LOW, HIGH, 'R');
}

void stop() {
  setInPins(LOW, LOW, LOW, LOW, 'S');
}

P.S.: Habe eine einfache Möglichkeit gefunden, die Ausgaben des Bluetooth-Moduls ohne Code-Anpassung zu simulieren:

Neuer Sketch
/*
  Forum: https://forum.arduino.cc/t/bluetooth-car-bewegt-sich-nicht/1379494
  Wokwi: https://wokwi.com/projects/430329632456613889

  ec2021
  2025/05/07

  Ohne #define WOKWI und entsprechende Anpassungen durch einen "Trick" in der Verkabelung:
  Der RX-Pin der Seriellen Schnittstelle ist mit dem RX-Pin von SoftwareSerial verbunden. Damit
  kommen alle Eingaben an Serial auch bei SoftwareSerial an. So lässt sich die serielle Ausgabe eines
  (hier nicht vorhandenen) Bluetooth-Moduls ohne Software-Anpassung simulieren.


  Annahme: Zwei Motoren sind so mit in1 bis in4 verbunden, dass

            Motor1 bei in1 HIGH und in2 LOW -> "Vorwärts" dreht
            Motor2 bei in3 HIGH und in4 LOW -> "Vorwärts" dreht

  Vorwärts-Drehung wird durch die grüne Led, Rückwärts-Drehung durch die rote Led signalisiert.

  Vorwärts/Rückwärts/Links/Rechts jeweils in Fahrtrichtung gesehen

  Serielle Kommandos:
   F -> Forward -> Vorwärts
   B -> Backward -> Rückwärts
   L -> Left     -> Links
   R -> Right    -> Rechts
   S -> Stop     -> Stopp

  Die Routinen müssen ggf. entsprechend der realen Verdrahtung angepasst werden (oder die
  Verdrahtung dem Code ;-) )



*/

#include <SoftwareSerial.h>

SoftwareSerial BlueTooth(8, 9);

#define in1 11
#define in2 10
#define in3 5
#define in4 6

char BT_input;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  BlueTooth.begin(9600);
  Serial.begin(9600);
  Serial.println();
}

void loop() {
  if (BlueTooth.available()) {
    BT_input = BlueTooth.read();
    switch (BT_input) {
      case 'f':
      case 'F':
        forward();
        break;
      case 'b':
      case 'B':
        backward();
        break;
      case 'l':
      case 'L':
        turnLeft();
        break;
      case 'r':
      case 'R':
        turnRight();
        break;
      case 's':
      case 'S':
        stop();
        break;
      default:
        if (BT_input >= ' ') {
          Serial.println(BT_input, HEX);
        }
    }
  }
}

void setInPins(byte val1, byte val2, byte val3, byte val4, char Cmd) {
  digitalWrite(in1, val1);
  digitalWrite(in2, val2);
  digitalWrite(in3, val3);
  digitalWrite(in4, val4);
  Serial.println(Cmd);
}

void forward() {
  setInPins(HIGH, LOW, HIGH, LOW, 'F');
}

void backward() {
  setInPins(LOW, HIGH, LOW, HIGH, 'B');
}

void turnLeft() {
  setInPins(LOW, HIGH, HIGH, LOW, 'L');
}

void turnRight() {
  setInPins(HIGH, LOW, LOW, HIGH, 'R');
}

void stop() {
  setInPins(LOW, LOW, LOW, LOW, 'S');
}

Der "Trick" ist die Drahtverbindung von RX Serial mit RX-SoftwareSerial:

Siehe https://wokwi.com/projects/430329632456613889

Moin Tüftler,

ich bin überrascht.
Du nutzt #define , zählst Variablen durch und setInPins() ist ja eher setOutPins :slight_smile:
Schau mal drauf, ob Dr das besser gefällt.

/*
  Forum: https://forum.arduino.cc/t/bluetooth-car-bewegt-sich-nicht/1379494
  // Wokwi: https://wokwi.com/projects/430329632456613889

  my_xy_projekt based on ec2021
  2025/05/07

  Ohne #define WOKWI und entsprechende Anpassungen durch einen "Trick" in der Verkabelung:
  Der RX-Pin der Seriellen Schnittstelle ist mit dem RX-Pin von SoftwareSerial verbunden. Damit
  kommen alle Eingaben an Serial auch bei SoftwareSerial an. So lässt sich die serielle Ausgabe eines
  (hier nicht vorhandenen) Bluetooth-Moduls ohne Software-Anpassung simulieren.


  Annahme: Zwei Motoren sind so mit in1 bis in4 verbunden, dass

            Motor1 bei in1 HIGH und in2 LOW -> "Vorwärts" dreht
            Motor2 bei in3 HIGH und in4 LOW -> "Vorwärts" dreht

  Vorwärts-Drehung wird durch die grüne Led, Rückwärts-Drehung durch die rote Led signalisiert.

  Vorwärts/Rückwärts/Links/Rechts jeweils in Fahrtrichtung gesehen

  Serielle Kommandos:
   F -> Forward -> Vorwärts
   B -> Backward -> Rückwärts
   L -> Left     -> Links
   R -> Right    -> Rechts
   S -> Stop     -> Stopp

  Die Routinen müssen ggf. entsprechend der realen Verdrahtung angepasst werden (oder die
  Verdrahtung dem Code ;-) )



*/

#include <SoftwareSerial.h>

SoftwareSerial BlueTooth(8, 9);

constexpr uint8_t motoPins {4};
constexpr uint8_t motoPin[motoPins] {11, 10, 5, 6};

constexpr bool forward[motoPins] {HIGH, LOW, HIGH, LOW};
constexpr bool backward[motoPins] {LOW, HIGH, LOW, HIGH};
constexpr bool turnLeft[motoPins] {LOW, HIGH, HIGH, LOW};
constexpr bool turnRight[motoPins] {HIGH, LOW, LOW, HIGH};
constexpr bool stop[motoPins] {LOW, LOW, LOW, LOW};

char BT_input;
char oldInput;

void setup()
{
  Serial.begin(9600);
  Serial.println(F("Start.... "));
  delay(300);

  for (byte b = 0; b < motoPins; b++)
  {
    pinMode(motoPin[b], OUTPUT);
    digitalWrite(motoPin[b], LOW);
  }

  BlueTooth.begin(9600);
}

void loop()
{
  getData();
  setDrive();
}

void getData()
{
  if (BlueTooth.available())
  { BT_input = BlueTooth.read(); }
}

void setDrive()
{
  if (oldInput != BT_input)
  {
    if (isAlpha(BT_input))
    {
      drive(stop);
      delay(20);              // kurze Pause schont die Antriebe!

      switch (ucase(BT_input))
      {
        case 'F': drive(forward); break;

        case 'B': drive(backward); break;

        case 'L': drive(turnLeft); break;

        case 'R': drive(turnRight); break;

        default:
          if (BT_input >= ' ')
          {
            Serial.print(F("FailChar: "));
            Serial.println(BT_input, HEX);
          }
      }

      debugData();
    }

    oldInput = BT_input;
  }
}

char ucase(const char c)
{
  if (c >= 'a' && c <= 'z')
  { return (c + ('A' - 'a')); }

  return c;
}

void drive(const bool *type)
{
  for (byte b = 0; b < motoPins; b++)
  { digitalWrite(motoPin[b], type[b]); }
}

void debugData()
{
  Serial.print(F("Input Char: "));
  Serial.println(BT_input);
  Serial.print(F("DriveState: "));

  for (byte b = 0; b < motoPins; b++)
  {
    Serial.print(digitalRead(motoPin[b]));
    Serial.print(' ');
  }

  Serial.println();
}

PS: im default: Zweig könnte das if()-Konstrukt auch rausfallen, da was anderes da nicht ankommt.

Moin @my_xy_projekt ,

stimmt, mein Freund :wink:

Allerdings wollte ich es dem interessierten und durchaus lernwilligen TO erleichtern, die Änderungen nachzuvollziehen. Ansonsten würde der Code natürlich auch anders aussehen.
Kommt vielleicht noch ...

P.S.: Die Funktion setInPins() hat ihren Namen von den Pins in1 bis in4, die darin gesetzt werden ... :slight_smile:

Herzliche Grüße
ec2021

1 Like

Leute, ihr seit echt cool ;).
Hab den Code von ec2021 einmal ausprobiert. Also grundsätzlich erkennt man am blinken das das Board einen Befehl bekommt, aber aus irgendeinem Grund setzt er den Befehl nicht um. Kann doch eigentlich wirklich nur noch an der Verkabelung liegen oder? Ich schicke mal Bilder, ich hoffe ihr könnt damit was anfangen :slight_smile:


Au schick, ein Problem :wink: Ich liebe Probleme....
Allerdings sind die Bilder dringend besser zu machen.
Kannst Du mal die Linse sauber machen und dann nochmal alles in einem Bild von oben, damit man das insgesamt sieht?

Danke!

Alternativ kannst ja mal meinen Code nehmen und den seriellen Monitor mitlaufen lassen, dann siehst Du, was passieren soll und kannst abgleichen mit dem was tatsächlich passiert.
Und bitte die Verbindung zwischen Serial RX und SoftwareSerial RX wieder auftrennen.