Preciso de verificar os bytes que envio para o arduino para garantir que chegam corretos, para isso pretendo enviar um byte antes e comparar com o byte que tenho no arduino e se for igual a que recebo os bytes que pretendo no arduino se for diferente envia uma mensagem de erro para o pc novamente. De seguida conto os bytes que pretendo receber no arduino se não os receber todos dentro de um determinado tempo volta a enviar uma msg para o pc (1 byte) para enviar de novo e o arduino fica a espera do byte iniciar para comparar novamente e não a espera dos bytes para o programa. Se alguém me poder ajudar agradecia.
Tags:
Ja tem um esboço do programa feito?
Manda aí que a gente completa!
union serial_super_data {
unsigned long int_8_bytes;
unsigned long read_byte[8];
} super_data;
// declaração das variáveis
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop()
{
// Função para receber os 8 bytes
...
// Uso esses bytes para controlar uma saida
}
}
Então vc precisa fazer uma verificação dos butes recebidos, né?
Bom, é pra isso que serve o checksum.
Podemos implementar um criando um protocolo. Vamos fazer o seguinte:
* Adicionar aos seus 8 bytes mais 2 bytes: 1 cabeçalho e 1 checsum
* O cabeçalho vem antes de todos os outros e tem sempre o mesmo valor (0x01, por exemplo)
* O checksum vai no final, e é o resultado da operação OU EXCLUSIVO entre todos os 9 bytes anteriores
esquema do protocolo:
CABEÇALHO BYTE_1 BYTE_2 BYTE_3 BYTE_4 BYTE_5 BYTE_6 BYTE_7 BYTE_8 CHECKSUM
O arduino le esses 10 bytes e faz o seguinte:
* Verifica se cabeçalho = 0x01, se não, pára de ler e retorna erro
* Realiza a operação OU EXCLUSIVO com os 9 primeiros bytes e se o resultado for diferente do byte CHECKSUM, retorna erro
* Se as duas verificações acima não deram erro, considera os bytes como válidos!
Essa é a lógica do programa, é algo assim que vc precisa??
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por