Serial.ReadString() funktioniert nicht

Hallo ich habe ein Problem,
ich habe einen Arduino Uno und einen Arduino Nano die miteinander kommunizieren sollten. Fürs erste funktioniert es super, jedoch wenn ich mein response printen will und danach das Serial.println("Get data"); aufrufen will und die Daten auslesen will funktioniert es nicht mehr.

Arduino Uno (Master) Code:

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

 void loop() {
  String response = Serial.readString();
  
  response.trim();
  Serial.println(response);
  if (response == "I am here") {

    Serial.println("Get data"); // Senden Sie das Kommando an den Slave
  }
  else {
    Serial.println("Are you there"); // Senden Sie das Kommando an den Slave
  }
  delay(1000);
}

Arduino Nano (Slave Code):

String name = "Arduino Nano";
String articleNumber = "12345";
String serialNumber = "98765";
String serviceDate = "2023-07-14";
String hardwareVersion = "1.0";

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

void loop() {
  String command = Serial.readString();
  command.trim();

  if (command == "Get data") {
  
    Serial.print("Name: ");
    Serial.println(name);
    Serial.print("Article Number: ");
    Serial.println(articleNumber);
    Serial.print("Serial Number: ");
    Serial.println(serialNumber);
    Serial.print("Service Date: ");
    Serial.println(serviceDate);
    Serial.print("Hardware Version: ");
    Serial.println(hardwareVersion);
  }

  if (command == "Are you there") {
    Serial.println("I am here"); // Antwort an den Master senden 
  }
}

Wenn ich beim Master Code das Serial.println(response); weglasse, dann funktioniert es im Seriellen Monitor vom Arduino Nano.
Aber ich bräuchte diese Daten auf dem Seriellen Monitor vom Master (Arduino Uno).

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.

Atmega328p hat nur ein UART und du benutzest die für miteinander kommunizieren. Für Nachrichten an dich brauchst du ein anderes(zusatzliches) Interface aufbringen.

Ich wurde ein Arduino Mega, ESP32 oder was anderes nehmen was hat mehrere Serials, oder Software Serial ginge auch, man braucht dafür aber zwei freie Pins.
Bei Software Serial nur max 9600Baud nutzen.

ja klar, aber ich will nur dass die Daten vom Nano auf den Uno gehen. Dass die Daten die vom Seriellen Monitor vom Slave beim Seriellen Monitor vom Master zu sehen sind.

Kann ich leider nicht, habe nur Nano und Uno zur Verfügung.

Dann bleibt Soft. Serial.

Wieso kannst du nicht SoftwareSerial verwenden ?
Das läuft auch auf dem Nano und Uno und jeweils auf freien digitalen Pins.

Es funktioniert auch nicht. Außerdem darf ich nur die RX und TX Pins anschließen. Das Problem ist dass die Abfrage (response =="Get Data") im Slave nicht funktioniert. Aber wenn ich das Serial.println("I am here") weglasse, dann
funktioniert es.

Du musst dein Sketch anpassen Hardware Serial zu senden und empfangen, Soft zu Ausgabe danach sollte funktionieren. Mit einem Serial sehe das Schwarz.
Mag sein das ich mich irre.
Schau dir doch die Beispiele an

"seriellen Monitor" gibt es nur am Rechner. verbinde beide Platinen über SoftwareSerial, dann hast du seriellen Port der am USB hängt frei um dir Debugging Nachrichten am Rechner in ArduinoIDE SerialMonitor oder SerialPlotter an zu zeigen, oder andere Terminal Programm deiner Wahl.

Wie sollen wir dir helfen, wenn du uns nicht das zeigst, was nicht funktioniert.

Merke: Wir können nicht auf deinen Arbeitsplatz und auf deinen PC sehen.

Was genau heißt das ?
Du darfst keine anderen Pins verwenden ?
Wer sagt das ?
Bei diesen Pins ist das Problem, die werden auch vom USB-Serialwandler benutzt.
Damit geht die Ausgabe auf den seriellen Monitor schief. Die verwendete UART ist kein Bus, sonder eine Punkt zu Punkt Schnittstelle.

Wenn Du softwareserial beutzt, hast Du RX und TX. Also genau das was Du benutzen darfst.

Ja.
Weil Du pingpong spielen willst, aber noch einen dritten Spieler bedienst. Das kann nicht klappen.

Ich habe noch nicht gesehen, was der Auslöser sein soll. Also das Ereignis, was dieses PingPong anstößt.

Beschreib mal Deinen Wunsch. Also die Abfolge, wer wie und auf was reagieren soll. Das bekommt man dann schon gebaut.

Anscheinend bist du nicht mal mit Basics vertraut, denn man liest aus dem Port nicht einfach so, man muss sicher sein dass da etwas zu lesen ist, sonst response wird = -1.

Nöö!
Nach dem Timeout gibt es einen String.
Sei er korrekt, verstümmelt/abgebrochen oder auch leer.
Aber -1 kommt nicht.

Danke dir. Ich bin echt unerfahren in dem was man bekommt wenn man es falsch macht.

Irren ist menschlich.
(Mich hat eher "Anscheinend bist du nicht mal mit Basics vertraut, " in Verbindung mit dem Irrtum gestört)

1 Like

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