Hallo zusammen!
Ich tüfftle immernoch an meinem Windgrafik-Projekt. Der Windsensor schickt jede Sekunde dieses Datentelegramm:
$WIMWV,179,R,3.4,N,A*35
Die erste Zahlengruppe gibt die Windrichtung an, die 2. Zahlengruppe die Windstärke an. Die Zahlen nach dem * sind die Prüfsumme.
Da sich die Werte verändern schwankt die Länge der jeweiligen Zahlengruppe zwischen 1-3 Stellen.
Ich habe dafür folgenden Sketch gebaut:
/*
* Testprogramm für die Extrahierung der Werte
* für Windrichtung und Windstärke aus dem
* Datentelegramm des Windmessers
*
* Beispiel:
* $WIMWV,179,R,3.4,N,A*35
*/
char Empf [25] = "0";
int Richt;
float Wind;
void setup()
{
Serial.begin(4800); // opens serial port, sets data rate to 4800 bps
}
void loop()
{
while (Serial.available() == 0)
{
Serial.println("Warte auf Eingabe");
}
Serial.readBytes(Empf, 25); //Datentelegramm einlesen
int Zeich = 7; //Springe zu Windrichtung
Richt = atoi(Empf + Zeich);
while (Empf[Zeich] != ',') //Ermittle die Länge der Windstärke (1 bis 3 Stellen)
{
Zeich++;
}
Wind = atof(Empf + Zeich + 3); //Nicht gebrauchte Zeichen überspringen
Serial.print("Windrichtung ");
Serial.println(Richt);
Serial.print("Windstärke ");
Serial.println(Wind);
Empf[0] = "0"; //Variable für Empfang wieder leeren
delay(9000); //Anzeige in Ruhe ablesen
}
Der funktioniert und packt mir die Daten in die entsprechenden Variablen für die Weiterverarbeitung.
Meine Fragen dazu:
-
Ist es sinnvoll so vorzugehen oder gibt es eine elegantere Lösung?
-
Wenn ich eine Funktion draus mache - gibt es eine Möglichkeit, dass eine Funktion 2 Werte zurückgibt? Dadurch könnte ich die globalen Variablen sparen.
-
Kann man am Arduino über Rx die Daten empfangen und zur Kontrolle über die USB-Leitung am Seriellen Monitor ansehen, welche Daten da angekommen sind?
Für Tipps wäre ich dankdar.