Waage und Arduino - Befehle senden und Antworten empfangen

Hallo,

ich habe hier eine Waage die ich mit einem Arduino ansprechen und die entsprechenden Antworten empfangen und verarbeiten möchte. Dies gelingt mir momentan jedoch noch nicht.

Die Waage ist über RS232 an Serial 1 (Ports 18 und 19) angeschlossen. Hier ein Beispielbefehl, um die aktuelle TAC Zählung der Waage (CAL.TAC) abzurufen:
Befehl (Master): CAL.TAC (mit ENTER dahinter)
Antwort (Waage): CAL.TAC 1136 (mit ENTER dahinter)

Ich bin mir jedoch nicht sicher wie ich den Befehl an die Waage senden kann. Serial1.write hatte scheinbar keinen Erfolg.

Mein Problem hier ist auch, dass ich ohne Befehl und Antwort auch keine Möglichkeit sehe,um zu überprüfen, ob die Verbindung überhaupt steht. Könnt ihr mir da weiterhelfen?

Viele Grüße

HaEngelmann

HaEngelmann:
Befehl (Master): CAL.TAC (mit ENTER dahinter)
Antwort (Waage): CAL.TAC 1136 (mit ENTER dahinter)

Ich bin mir jedoch nicht sicher wie ich den Befehl an die Waage senden kann. Serial1.write hatte scheinbar keinen Erfolg.

Mit write sendest Du auch keine Strings.

Probier mal

Serial1.print("CAL.TAC\r");

Arduino hat keine RS232 Schnittstelle. Die Pegel sind anders als bei der seriellen Schnittstelle der Arduino. Du brauchst einen Pegelwandler zB MAX232

Grüße Uwe

Mit write sendest Du auch keine Strings.

Ich schon.

char* string= "hello world\n";
void setup() {
Serial.begin(9600);
Serial.write(string);
}
void loop() {}

Im Beispiel auf

muss man nur die Anführungszeichen auf " " ändern.

ich habe hier eine Waage die ich mit einem Arduino ansprechen und die entsprechenden Antworten empfangen und verarbeiten möchte. Dies gelingt mir momentan jedoch noch nicht.
...
Befehl (Master): CAL.TAC(mit ENTER dahinter)
Antwort (Waage): CAL.TAC 1136(mit ENTER dahinter)

Kannst du die Waage mit was anderem ansprechen ? ( Terminalprogramm am PC oder so ? )

Wenn die Pegel TTL / RS232 stimmen:
Parameter der Seriellen Schnittstelle ( Baudrate, Parity, Stopbits ) ?
Welches Zeichen genau ist das Enter ? ( '\r' = 0x0d = CR oder '\n' = 0x0a = LF oder beides ) ?
Was sendet die Waage, wenn sie was nicht versteht ?

Erstmal danke für die bisherigen Antworten. :slight_smile:

Ich habe einen MAX3232 zwischen Arduino und Waage eingesetzt und auch schon an sich write und print ausprobiert.

Jetzt habe ich gerade nochmal ausprobiert wie sich das mit CR und LF als "Enter" verhält. Ich brauche dort beides. Wie kann ich dies beim senden eines Strings unterbringen?

Hier noch als Beispiel eine Ausgabe des Gewichtes:
Befehl: WEI.GRO
Antwort: WEI.GRO+ 1300.53d

Das Gewicht waren ca. 1300g.

Das nennt sich Escape- oder Fluchtsequenzen:

Serial.print("Text\r\n");

println() macht glaube ich auch CR+LF

Serial.print("\r\n");

Irgendwie klappt das noch nicht so ganz. Ich habe mal den Code und den Aufbau in den Anhang gepackt. Seht ihr da irgendwelche grundlegenden Fehler?

Waage (1.01 KB)

& = bitweises Und
&& = boolsches/logisches Und

Du willst &&

Und das darfst du nur einmal machen:

  Serial1.print("WEI.GRO\r\n");
  Serial.println("Befehl gesendet");

Du sendest in jedem loop() Durchlauf Text. Das ist Irrsinn. Merke dir ob du das schon gemacht hast und sende erst wieder einen Befehl wenn du die Antwort erhalten hast.