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.
Tags:
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ê
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por