Danke für deine Antwort, aber wie lese ich das denn in einer Schleife ein? Stehe da gerade voll aufm Schlauch.
Danke für deine Antwort, aber wie lese ich das denn in einer Schleife ein? Stehe da gerade voll aufm Schlauch.
So z.b.
Da dieser Teil vermutlich eh in einer Schleife läuft, kannst du vermutlich auch if() anstatt while() verwenden.Code:char str[32]; int i = 0; ... while(Serial.available() > 0) { str[i] = Serial.read(); if(str[i] == /* Stop zeichen */) { str[i] = '\0'; i = 0; break; } i++; } ...
mfg
Geändert von Wsk8 (29.09.2013 um 16:04 Uhr) Grund: Code geändert
Danke für deine Hilfe. Habs jetzt hinbekommen.
Hier die Lösung:
MFGCode:char buffer[10]; int data[1]; int index_a = 0; int index_b = 0; void loop() { if(Serial.available() > 0) { //aktuelles Zeichen einlesen buffer[index_a] = Serial.read(); //Trenner oder Zeilenende if (buffer[index_a] == ',' || buffer[index_a] =='\n') { buffer[index_a] = 0; //Umwandeln in eine Zahl data[index_b] = atoi(buffer); //Datenindex ändern index_b = ++index_b % 2; if(index_b == 0) { Serial.print(data[0]); Serial.print(" "); Serial.println(data[1]); } index_a = 0; } else { index_a ++; } } }
Mal ganz davon abgesehen, dass int data[1] völliger Schwachsinn ist und du mit data[1] = ... oder höher ins Nirvana schreibst, kapier ich diesen Teil auch nicht
Zudem wird nirgends index_b resetet.Code://Datenindex ändern index_b = ++index_b % 2; if(index_b == 0) { Serial.print(data[0]); Serial.print(" "); Serial.println(data[1]); }
mfg
Geändert von Wsk8 (29.09.2013 um 17:45 Uhr)
Du hast recht. Funktioniert doch nicht so richtig. Hast du eventuell einen besseren Vorschlag, wie die die beiden Werte eingelesen bekomme. So langsam bin ich nämlich am verzweifeln.
Gruß
Marko
Spontan würde ich vorschlagen C programmieren zu lernen. Ansonsten:
Ich bin mal von deinem Beispiel ausgegangen dass das Sensor Ergebnis immer 3 Stellig ist. Wenn es das nicht ist brauchst du natürlich immer noch ein eindeutiges Stopzeichen auf dass du in der while Bedingung abfragen kannst. Aber das wurde bereits von weiter oben gezeigt.Code:int i = 0; char temp[4]; while(i <4) { temp[i] = readSerialChar(); //Hier die passende Serialport methode verwenden i++; } int result = atoi(temp);
Geändert von shedepe (30.09.2013 um 12:10 Uhr)
mfgCode:char str[32]; int i = 0, j = 0; int val[2]; ... while(Serial.available() > 0) { str[i] = Serial.read(); if(str[i] == '\n' || str[i] == ',') { str[i] = '\0'; i = 0; val[j] = atoi(str); j++; if(j > 1) { j = 0; /* flag etc setzen, dass 2 Werte empfangen wurden und verarbeitet werden können ... whatever... */ } break; } i++; } ...
Lesezeichen