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?

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

Popular posts from this blog

Authentication error while password reset - Raspberry Pi Forums

opencv3, tbb and rasp pi 2 - Raspberry Pi Forums

small ethernet problem - Raspberry Pi Forums