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.
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
J-M-L
May 19, 2023, 3:14pm
3
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
agmue
May 19, 2023, 3:38pm
4
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");
}
agmue
May 19, 2023, 4:57pm
7
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.
sorry14:
Kann jemand helfen?
Nimm dir eine Stunde Zeit und arbeite die
Updated Version
Please note that this is a revised version of the advice in this earlier Thread which has become very long. As far as possible I have kept the code examples identical or simplifed them slightly. It should not be necessary to refer to the older Thread, but feel free to do so.
Contents
The following sections are in this Tutorial
Introduction
Serial data is slow by Arduino standards
Example 1 - Receiving single characters
Why code is organized into functions
Exampl…
durch. Ist gut investierte Zeit!
system
Closed
November 15, 2023, 6:23pm
9
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.