Olá pessoal, tudo bom?
Preciso ler dados da serial e compara-los com um padrão (protocolo).
Não tenho muita experiência, então não sei se é melhor criar uma string de entrada e depois fazer a comparação ou fazer uma rotina para tratar cada byte recebido sem montar uma string.
Para começar fiz o seguinte código tentando jogar os bytes lidos da serial numa string:
const int N = 10;
char inMsg[N];
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0)
{
int i = 0;
while((Serial.available() > 0) && (i < N))
{
inMsg[i] = Serial.read();
++i;
}
// teste: imprime array para verificar o conteudo
imprimeMsg();
}
}
void imprimeMsg()
{
int i = 0;
//for(i = 0; i < (sizeof(inMsg) / sizeof(char)); i++)
for(i = 0; i < N; i++)
{
Serial.print("inMsg[");
Serial.print(i);
Serial.print("] = ");
Serial.println(inMsg[i]);
}
}
O problema é que no teste, enviando a string '0123456789', tem ocorrido o seguinte:
inMsg[0] = 0
inMsg[1] = \0x00
inMsg[2] = \0x00
inMsg[3] = \0x00
inMsg[4] = \0x00
inMsg[5] = \0x00
inMsg[6] = \0x00
inMsg[7] = \0x00
inMsg[8] = \0x00
inMsg[9] = \0x00
inMsg[0] = 1
inMsg[1] = 2
inMsg[2] = 3
inMsg[3] = 4
inMsg[4] = 5
inMsg[5] = 6
inMsg[6] = 7
inMsg[7] = 8
inMsg[8] = 9
inMsg[9] =
Ou seja, ao invés de montar uma string com todos os bytes está sendo criada uma nova string após o primeiro byte lido da serial.
Obs: ainda falta fazer a rotina do protocolo, mas primeiro preciso garantir que estou obtendo os bytes corretamente.
Alguem tem ideia de como fazer?
Espero que possam ajudar.
Abs.