Seriellen String einlesen
hallo,
ich versuche einen string einzulesen, der immer die gleiche zeichenlänge hat.
es handelt sich hierbei um 4 hex werte.
die ersten beiden zeichen geben an, welche funktion gewählt werden soll. (00 - ff).
die anderen 6 zeichen geben ebenfall parameter im bereich von 0 -255 wieder.
nach den 8 zeichen kommt dann ein nl. sollten nicht alle zeichen angekommensein, und das nl kommt, soll der inhalt verworfen werden.
jedoch funktioniert das bei mir noch nicht wirklich, tipps?
ich versuche einen string einzulesen, der immer die gleiche zeichenlänge hat.
es handelt sich hierbei um 4 hex werte.
die ersten beiden zeichen geben an, welche funktion gewählt werden soll. (00 - ff).
die anderen 6 zeichen geben ebenfall parameter im bereich von 0 -255 wieder.
nach den 8 zeichen kommt dann ein nl. sollten nicht alle zeichen angekommensein, und das nl kommt, soll der inhalt verworfen werden.
jedoch funktioniert das bei mir noch nicht wirklich, tipps?
code: [select]
char string[9];
char stringok[9];
boolean ok = false;
int = 0;
void setup(void)
{
serial.begin(9600);
}
void loop(void)
{
while(serial.available())
{
string[i] = serial.read();
if(string[i] == '\n' && == 8)
{
for(int j = 0; < 9; j++)
{
serial.print(string[j]);
}
serial.print("\n");
i = 0;
memcpy(stringok, string, 9);
ok = true;
memset(string, 0, 0);
}
else if(string[i] != '\n' && < 8)
{
i++;
}
else
{
serial.print("error \n");
i = 0;
memset(string, 0, 0);
}
}
if(ok == true)
{
ok = false;
// parsen
}
}
jedoch funktioniert das bei mir noch nicht wirklich, tipps?
mit dem code nach dieser bauart:
code: [select]
while(serial.available())
{
// tu was
}
verarbeitest du in aller regel genau ein einziges zeichen.
und zwar weil serial schnarchlangsam ist. d.h. beim eintritt in diese while-schleife ist ein zeichen im puffer, und wenn die schleife zum ersten mal abgearbeitet ist, ist kein zeichen mehr im puffer. weil das abarbeiten der schleife viel schneller ist als die zeit, um das nächste zeichen über serial zu senden.
am einfachsten wäre die programmlogik, wenn das einlesen eine gewisse zeit dauern dürfte.
zum beispiel mit dieser logik:
code: [select]
if (serial.available()
{
delay(10);
while(serial.available())
{
// tu was
}
}dann würde das delay(10) dafür sorgen, dass erstmal die zeile empfangen wird, bevor du mit der verarbeitung loslegst.
Arduino Forum > International > Deutsch (Moderator: uwefed) > Seriellen String einlesen
arduino
Comments
Post a Comment