E ai pessoal do LdG estou precisando uma ajuda de vocês para eu montar um protocolo de comunicação serial entre o Arduino e o PC.

Montar a estrutura do bloco beleza, é bem simples, porém estou com uma dúvida grande como implementar dentro do Arduino.

Nos meus teste iniciais, criei uma variavel do tipo String e vou concatenando o que eu recebo via serial até ter os caracteres de inicio e fim de comunicação...

Porém estou vendo que as vezes da merda e o Arduino se perde...
Queria implementar algo que se vire sozinho e entenda os comandos...

[]s!

Exibições: 2145

Responder esta

Respostas a este tópico

vc ker pegar dados do pc ? de qual porta ?

O caminho é esse que vc está fazendo mesmo. Seja mais específico sobre "o Arduino se perde", até pq quem se perde são os nossos programas...

Porque não, modbus RTU? Ja tem tudo pronto do lado do Arduíno..

Olá, na verdade estou querendo aprender a estrutura básica de comunicação e controle de fluxo, do que foi recebido, se está ok...esta coisas...

Voce deve montar um driver de transmissão e um de recepção, declara um buffer de Tx e outro de Rx.

Depois defina o protocolo.  Por ex, byte 0 = 0xaa (header), byte 1 = endereço, byte 2 = nro de bytes da msg,

byte 3 a n = msg, byte n+1 = crc. Defina uma rotina de crc igual para os dois lados. Pode ser simples como

a soma dos bytes.  O driver de transmissão é chamado quando vc acabar de montar o buffer, vai inicializar o crc e transmitir os dados do buffer calculando o crc a cada byte transmitido.

O driver de recepção fica esperando o byte de header, caso receba espera o byte 1 e compara o endereço.

Se for para ele recebe o byte 2 de nro de bytes, inicia o crc, recebe os bytes da msg e guarda no buffer calculando o crc, recebe o crc e compara com o que ele calculou, se for igual seta flag indicando que o buffer tem uma msg valida.. Precisa bolar alguma forma de abortar caso a recepção seja interrompida, caso contrario trava a maquina até receber o ultimo byte.

como eu declaro isto no Arduino?

Quero enviar dados de uma serial qualquer para a serial do Arduino, tendo um protocolo meu para enviar comandos e respostas em sentido duplex...

Até que comecei a desenvolver um código conforme código abaixo. Porém minha dúvida é como fazer o controle de fluxo, que uma serial enviar XYZ e a que receber entender a mesma coisa. A forma que usei para empilhar os dados está correta?

void serialEvent(){
strPortaSerial = strPortaSerial + (char)Serial.read();

if ((strPortaSerial.indexOf("$") > 0) && (strPortaSerial.indexOf("#") > 0))
{
linhaDeComando = "";
linhaDeComando = strPortaSerial.substring(
strPortaSerial.indexOf("$") + 1,
strPortaSerial.indexOf("#"));

if (strPortaSerial.substring(1, ",") = "")
{

}

strPortaSerial = "";
}
}

[]s!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço