Tenho um dispositivo que, em certas condições, envia um protocolo escrito"$D01", em ASCII, de segundo em segundo. Gostaria de usar o Arduino para receber esse código, entendê-lo e enviar outro protocolo de resposta, um fixo, que provavelmente eu salvaria em uma variável qualquer.

Quando conecto o RX e o TX desse dispositivo no RX e TX Arduino e gravo uma programação vazia nele, consigo ver esse protocolo sendo transmitido através do Serial Port. Porém, quando componho o código para tentar "usar" essa informação (toda aquela novela que envolve Serial.begin(115200), Serial.available() > 0, Serial.Read() e Serial.println), não consigo a resposta que quero, nem se eu definir que o Serial.println(Serial.read()). Especialmente nesse caso, tenho -1 como resposta, o que significa que não tem dado disponível. Mas se eu repetir o procedimento de gravar uma tela em branco no Arduino e verificar o serial port, lá está o protocolo "$D01".

Existe alguma maneira de eu tornar essa mensagem acessível para o Arduino e salvá-la em alguma variável? Ou mesmo só recebê-la e enviá-la de novo para o mesmo dispositivo?

Exibições: 809

Responder esta

Respostas a este tópico

Olá Rennan

Suspeito que você ligou esse outro dispositivo nos pinos 1 e 0 do Arduino ou não?

Mas conte como você fez as ligações, que código usou e qual o equipamento que você ligou no Arduino, dependo do equipamento ele pode gerar tensões que podem queimar o Arduino, se for ligado diretamente.

Sim liguei no 1 e no 0, e tentei o SoftwareSerial também. O Arduino está sendo alimentado pelo USB do PC e o outro dispositivo tem um PIC18F como microcontrolador.

A programação em sua forma mais simples, só pra saber se eu conseguia, de alguma forma, "pegar" o que o serial estava recebendo era essa:

void setup() {
Serial.begin(115200);

}

void loop() {
Serial.println(Serial.read());

}

Porém, essa programação retorna um -1 como reposta no Serial Port (lembrando que, se eu gravar uma tela em branco no Arduino e mantiver as ligações, o protocolo "$D01" é visível no serial port).

Pois bem, os pinos 1 e 0 (TX0 e RX0) são usados para a gravação do sketch e/ou para a comunicação entre o Arduino e o computador, somente. Também pode ser usado como I/O digital, mas é outra historia.

Se você pretende conectar algum dispositivo serial(UART) no Arduino, use outros pinos e também biblioteca SoftwareSerial.

Qual é o seu Arduino, Uno, Mega?

É o Arduino Uno. Vou providenciar as portas TX e RX em outros pinos, então.

Mas ainda assim: como transformar esse "$D01" em uma informação?

Ok, Uno só tem uma UART então use SoftwareSerial, mas lembre essa biblioteca tem limitações em baudrate.

Quando você diz "transformar esse "$D01" em uma informação", você quer decodificar, certo?

Então eu não conheço esse código, mas caso tenha uma tabela que especifique cada código você pode interpreta-lo e tomar alguma decisão dentro do Arduino.

Mas ainda não entendi a sua dúvida.

A dúvida é: como consigo fazer com que o Arduíno entenda que recebeu um "$D01" e envie uma resposta de confirmação?

Esse código está em ASCII.

Oi RO, boa tarde.

Voce disse que este equipamento usa um PIC18F como ucontrolador.

Mas a saída dele que você utiliza, sai diretamente de um port do PIC, ou este

sinal saído do PIC passa por outro componente, por exemplo um MAX232), ou outro

ativo qualquer?

Rui

Boa tarde, Rui.

Ele sai direto do Pic, não passa por nenhum outro componente.

Oi RO, e as configurações da serial deste deste PIC,

8N1 e Baud reate 115200 ?

Rui

Não sei te dizer quanto ao 8N1, mas acredito que seja. Quanto ao baud rate, é 115200 mesmo.

Mas me ocorreu uma dúvida agora: na verdade, eu estou desenvolvendo uma jiga de testes que receberia esse protocolo de um produto e responderia que estava tudo ok, sempre. O produto que essa jiga substituiria possui um MAX3232. Será que é a falta dele que está causando o problema?

Oi RO,

vamos lá

8  = padrão de transmissão em 8 bits por pacote

N  = paridade "None"

1 = 1 Stop bit

O outro equipamento deve estar usando este MAX3232 para converte o nível TTL que sai do PIC para o nível RS232 necessário para ele.

Este equipamento (PIC) envia os dados a  cada segundo?

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço