Forum: Compiler & IDEs parseInt und parseFloat über Serial1


von Belo L. (belo)


Lesenswert?

Hallo Forum,

ich möchte beim Arduino gerne über die Schnittstelle Serial1 (RX/TX) 
Integer- und Floatzahlen übertragen. Ich habe das mit parseInt() 
versucht. Da kommt aber nichts an. Hier die Programme:
Der eine Leonarde sendet:
1
void setup() {
2
    Serial.begin(9600);
3
}
4
5
void loop() {
6
    Serial1.println(222);
7
}

Der andere Leonardo empfängt die Daten:
1
void setup() {
2
    Serial.begin(9600);
3
}
4
5
void loop() {
6
    int fff;
7
    fff = Serial1.parseInt();
8
    Serial.print(fff);
9
    Serial.println();
10
}

Die Ausgabe ist immer 0.
Die Verbindung zwischen den beiden Arduinos funktioniert aber.

Die Abfragen parseInt/parseFloat sind eigentlich ohnehin zu langsam. 
Gibt es da eine bessere Methode ?

: Bearbeitet durch User
von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hallo,

(ich vermeide Arduino wo es nur geht und habe deswegen auch wenig Ahnung 
von der API, aber)

parseInt() kingt so, als ob aus mehreren ASCII-Zeichen ein Int 
zusammengebaut wird, also aus
1
"1234" /* entspricht */ '1', '2', '3', '4'
 wird
1
(int)1234

das bedeutet aber auch, dass man eine ASCII codierte Zahl senden muss, 
also
nicht
1
Serial1.println(222);
 sondern
1
Serial1.println("222"); /* als stringin Anfuehrungszeichen */

Die (sehr wahrscheinlich) schnellere Methode wäre die 
Standard-C-Funktion atoi().

Mit freundlichen grüßen,
N.G.

von yesitsme (Gast)


Lesenswert?

Es wird beim Senden Serial initialisiert und Serial*1* benutzt. 
Funktioniert das so? Ähnliches auch beim Empfangen.

Hast du schon das Senden und Empfangen von Strings probiert?

von yesitsme (Gast)


Lesenswert?

"If no valid digits were read when the time-out occurs, 0 is returned;" 
(https://www.arduino.cc/en/Serial/ParseInt)

Vielleicht ist es auch nützlich zu testen ob überhaupt Zeichen zum 
parsen da sind.

von Jürgen S. (jurs)


Lesenswert?

Belo L. schrieb:
> ich möchte beim Arduino gerne über die Schnittstelle Serial1 (RX/TX)
> Integer- und Floatzahlen übertragen. Ich habe das mit parseInt()
> versucht. Da kommt aber nichts an.
Hast Du die RX/TX-Leitungen zwischen den Schnittstellen der Boards 
gekreuzt?

Und wie lang sind die Leitungen zwischen den Boards?
Breadboard-Jumperkabel mit 20cm Länge, oder was?

von besserwisser (Gast)


Lesenswert?

yesitsme schrieb:
> Es wird beim Senden Serial initialisiert und Serial*1* benutzt.
> Funktioniert das so? Ähnliches auch beim Empfangen.
>
> Hast du schon das Senden und Empfangen von Strings probiert?
Jürgen S. schrieb:
> Belo L. schrieb:
>> ich möchte beim Arduino gerne über die Schnittstelle Serial1 (RX/TX)
>> Integer- und Floatzahlen übertragen. Ich habe das mit parseInt()
>> versucht. Da kommt aber nichts an.
> Hast Du die RX/TX-Leitungen zwischen den Schnittstellen der Boards
> gekreuzt?
>
> Und wie lang sind die Leitungen zwischen den Boards?
> Breadboard-Jumperkabel mit 20cm Länge, oder was?


Belo L. schrieb:
> Die Verbindung zwischen den beiden Arduinos funktioniert aber.

von Belo L. (belo)


Lesenswert?

ui, vielen Dank für die Antworten. Sorry für die späte Antwort. Ich 
hatte wohl Thread beobachten nicht eingeschaltet und wurde deswegen 
nicht benachrichtigt.

Inzwischen klappt es. Weiß nicht mehr genau, was es war. Vielleicht, 
weil ich Seral initialisiert habe und auf Serial1 geschrieben habe.

Vielen Dank, waren nützliche Hinweise.

Belo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.