Em meu projeto, tenho um software que envia comandos ao arduino para comando de ON/OFF a relês , ficando a partir de então essa ação por conta do arduino.

  Ocorre que em meu caso, um comando enviado para ligar um relê no arduino , em caso da conectividade da porta serial se perder, esse relê teria que desligar de imediato , ou seja, algo programado no próprio arduino visto que sem a serial o software não teria como envia o comando stop.

  Não consegui resultados com Serial.Avaiable  então , gostaria de saber se alguém saberia como posso tratar essa questão ?   grato.

  

Exibições: 358

Responder esta

Respostas a este tópico

eu faria assim: programaria o software para que, de tempos em tempos, e após o envio do comando ON, o software enviasse algum sinal pro arduino, na intenção de confirmar que há conectividade entre o software e o arduino. Algo como "TÔ VIVO E ESTAMOS NOS COMUNICANDO!"

Dessa forma, o arduino espera que o software envie de tempos em tempos aquele sinal pré-combinado. Se o arduno não receber aquele sinal dentro de um certo limite de tempo, ele assume que a comunicação se perdeu e então desliga o relê.

 Essa opção não me atende , eu precisava de algo realmente instantâneo. Trata-se do acionamento da comporta de uma balança que no momento acionado despeja algumas Toneladas de material.

 Se eu perco o controle da pesagem a interrupção tem q ser imediata , qualquer delay neste sentido,  estamos falando de muito material escorrido ...esse é o problema.

além do mais , ainda que o software pergunte ao arduino e não tenha resposta , como paro o rele ?? a comunicação já era ..tem q ser algo via arduino mesmo.

basta programar o arduino para ele (o arduino) comandar o desligamento do relê em caso da comunicação entre o software e arduino se perder.

O quanto vc chama de "instantâneo"? 1 segundo? 500 milisegundos? 100 milisegundos? Vc é quem terá a prerrogativa de definir esse tempo. Se vc deseja que o "instantâneo" seja de 100 milisegundos, programe o software pra enviar sinais pro arduino a cada 50 milisegundos.

Se o arduino perceber que 2 sinais consecutivos deixaram de chegar, dará os 100 milisegundos, e aí o arduino comandará o desligamento do relê

Você pode fazer com que o PC fique enviando um caracter determinado pro arduino a cada x segundos e quando o arduino receber este caracter ele reinicia um temporizador. Se o arduino o não receber o caracter o temporizador estoura e dispara uma rotina de tratamento onde você manda desligar os relés.

Pode ser uma hipótese, mas falando-se de Serial , eu receio que ocorra uma má interpretação em um dado momento porque muitas vezes , dependendo do que se está processando , a leitura e/ou escrita da serial falha momentaneamente né ?

Bom, se não houver uma forma via c++ no  arduino , é a hipótese que resta ...

Eu só tomaria o cuidado de não basear a comunicação do pc pro arduino na transmissão de um único caracter. Vc corre o risco da leitura pelo arduino ocorrer errada e coincidentemente ser interpretada como verdadeira. 

essa questão de falha na leitura e/ou escrita eu procuro resolver com o uso de digito verificador, que é transmitido juntamente com o código. Mais ou menos como o número de CPF: os nove primeiros números são considerados os números principais e os 2 últimos servem para checar a integridade dos 9 números principais.

Há inúmeras técnicas pra criar algoritmos de digito verificador. 

Usando assim não atendeu?

while (Serial.available()) {

   //faz algo

}

 Tenho algo assim :

while (Serial.available()) {

  liga rele1;

  liga rele 2

}

 Preciso que dentro deste while ele indentifique a desconectividade da serial e faça (quando a conexão deixar de existir ) :

 delisga rele1.

 desliga rele2;

 

 

Oi CC, boa noite.

Voce já avaliou a função  "ifSerial ()" ?

https://www.arduino.cc/en/Serial/IfSerial

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço