Hallo,
also wenn ich den Serial Monitor auf Neue Zeile(NL) einstelle funktioniert das mit
if(buffer[bindex] == ',' || buffer[bindex] == '\n'{
Wenn ich jetzt in der shell (Linux)
echo "4660,1,17\n" > /dev/ttyUSB0
absetze funktioniert das auch :-)
Nun aber habe ich ein neues Problem, meine testfunktion wird 3 mal ausgeführt,
immer wenn dem Array ein neues Element zugewiesen wird.
Eingabe: 4660,1,17
Ausgabe: 4660
0
0
4660
1
0
4660
1
17
Die Funktion darf aber nur einmal innerhalb einer Eingabe ausgeführt werden. Also Funktion erst ausführen wenn das Array die Werte 4660
1
17
komplett hat. Danach Array für die nächste Eingabe wieder auf 0 setzen.
char buffer[10];
int data[3];
int bindex,dindex=0;
void test(int wert0, int wert1, int wert2) {
Serial.println(wert0);
Serial.println(wert1);
Serial.println(wert2);
}
void setup() {
Serial.begin(9600);
}
void loop() {
while(Serial.available() >0) {
//aktuelles Zeichen einlesen
buffer[bindex] = Serial.read();
//Trenner oder Zeilenende gefunden
if(buffer[bindex] == ',' || buffer[bindex] == '\n') {
//Null-Terminierung
buffer[bindex] = 0;
//Umwandeln in eine Zahl
data[dindex] = atoi(buffer);
test(data[0], data[1], data[2]); // testfunktion
//Datenindex rotieren
dindex = ++dindex % 3;
//Buffer Index zurücksetzen
bindex = 0;
} else {
bindex++;
}
}
}
Wo muss die Funktion "test" hin, damit sie nur einmal ausgeführt wird ?
gruss
vobie