Serial.readString();

Hi guys, ich kommuniziere gerade zwischen zwei Arduinos und möchte das wenn Arduino 1 "EIN" sendet das Arduino 2 darauf antwortet. Mein Code sieht so aus:

Sender:

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

}

void loop() {
 Serial.println("EIN");
 delay(1000);
 Serial.println("AUS");
 delay(3000);

}

Empfänger:

 String receivedData = "LEER";
void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    String receivedData = Serial.readString();
    Serial.flush();
  }

  if(receivedData == "EIN"){ // Hier
    Serial.println("Es ist eingeschalten worden");
  }
   if(receivedData == "AUS"){
    Serial.println("Es ist ausgeschalten worden");
  }
}

Die Kommunikation funktioniert aber die Reaktion auf Schlüsselbegriffe (//Hier) geht nicht. :grinning:

Kann jemand helfen?

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

1 Like

Sehen Sie sich die Dokumentation für Serial.readString() - Arduino Reference an.

Sie erhalten alles von der seriellen Leitung im String bis zu einem Timeout ➜ das bedeutet, dass Sie auch CR und LF erhalten.

versuchen dies

  if(receivedData == "EIN\r\n"){ // Hier
    Serial.println("Es ist eingeschalten worden");
  }
  else if(receivedData == "AUS\r\n"){
    Serial.println("Es ist ausgeschalten worden");
  }

Sie sollten Serial.readStringUntil() erkunden oder (besser) Wenn Sie Englisch lesen ➜ Serial Input Basics

Das Gleichheitszeichen bedarf einer genauen Analyse, welche Daten gelesen werden. "Unsichtbare" Leerzeichen und wie hier Steuerzeichen sind Stolpersteine. Ich lasse mir die Zeichen gerne in HEX ausgeben:

      for (byte j = 0; j < sizeof(receivedData); j++)
      {
        Serial.print(receivedData[j], HEX);
        Serial.print(" ");
      }
      Serial.println(" ");

Anstelle der Prüfung auf Gleichheit kann auch die ungenauere Prüfung auf den Zeichenkettenanfang mittels if (receivedData.startsWith("EIN")) zumindest vorübergehend weiterhelfen.

Steuerzeichen wie STX am Anfang und ETX am Ende trennen Zeichenströme voneinander. Das haben schon die Fernschreiber so gemacht.

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

void loop() {
 Serial.println("E");
 delay(1000);
 Serial.println("A");
 delay(3000);
}
void setup() {
  Serial.begin(115200);
}

void loop() {
  static char receivedData=' ';

  if (Serial.available() > 0) receivedData = Serial.read();
  if(receivedData == 'E')Serial.println("Es ist eingeschalten worden");
  if(receivedData == 'A')Serial.println("Es ist ausgeschalten worden");
}

Wo sendest du die daten?

Du bist doch auch in seinem anderen Thema aktiv: TFT auf UNO gesteckt, fast alle Pins belegt, nur TX ist noch sinnvoll nutzbar.

Beim Empfänger könnte man SoftwareSerial verwenden.

Nimm dir eine Stunde Zeit und arbeite die

durch. Ist gut investierte Zeit!

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