bubulindo:
Ou seja, os dados foram bem recebidos, mas são mostrados numa ordem estranha?
Correcto. No 1r loop a ordem esta certa, a seguir, nunca mais.
Repara que todas estas questões podem ser facilmente respondidas com mais informação, particularmente o código fonte...
Até ao momento temos dois pedacinhos de código bastante pequenos e a tua opinião acerca do que o problema é. Sem mais dados é mesmo impossível ajudar.
void loop()
{
lcd.clear_lcd(WHITE);
delay (200);
char wip[20]=" ";
char load[20]=" ";
char vr[20]=" ";
char dt[20]=" ";
char tm[20]=" ";
int st = 03;
int lf = 10;
// recepcao e armazenamentos de dados via serial
while(Serial.available() > 20)
{
Serial.readBytesUntil(lf, vr, 20);
Serial.readBytesUntil(lf, dt, 20);
Serial.readBytesUntil(lf, tm, 20);
Serial.readBytesUntil(lf, wip, 20);
Serial.readBytesUntil(lf, load, 20);
}
// visualiza as arrays no lcd
lcd.str_lcd(vr,1, 1, 1, BLACK, -1);
lcd.str_lcd(dt,1, 3, 1, BLACK, -1);
lcd.str_lcd(tm,1, 4, 1, BLACK, -1);
lcd.str_lcd("WAN ip:",1, 5, 1, BLACK, -1);
lcd.str_lcd(wip,1, 6, 1, BLACK, -1);
lcd.str_lcd("Load average:",1, 7, 1, BLACK, -1);
lcd.str_lcd(load,1, 8, 1, BLACK, -1);
delay (1000);
}
Codigo, extremamente simples.
O restante é irrelevante, acho eu, porque so se aplica a inicialização do LCD e as definições do mesmo.
Nas definições serial, também nada de complicado, so mesmo velocidade: 9600.
data1 tem um tamanho constante? Ou é variável?
Data1, data2, etc, variam de 10 chars ate 19 max.
O sistema linux está a correr como? Tem threads ou processos a aceder à porta série duma forma não sequencial?
È um script basico em bash, que esta no cron e lançado de x em x mns.
echo -e "$vr\0x0d" > $SR
echo -e "$D1\0x0d" > $SR
echo -e "$D2\0x0d" > $SR
echo -e "$WIP\0x0d" > $SR
echo -e "$LD\0x0d" > $SR
Também tentei num mesmo echo, também tentei com delay entre cada um,etc.
[/quote]
A maneira mais robusta de resolver isto é mesmo através dum protocolo... da mesma maneira uqe mandas um caracter de fim, podes enviar um caracter de inicio que te diz o que a string é...
Algo tipo:
echo "Adata1\0x0d" > /dev/tts/1[/quote]
Pois, nos LCD 1602, com i2c, mando isso da mesma forma, sem ser por arrays com LF a separar, mas no caso deste lcd so mesmo por string completas e recorrendo a arrays para delimitar os campos. Por isso é que testei com readBytesUntil, com óptimos resultados na aquisição e visualização no LCD, a nao ser o problema de sequência. Vou tentando variações do codigo.
Mais uma vez obrigado.