[DÚVIDA] Uso da função millis() para controlar circuitos distintos com períodos de (liga/desliga) diferentes

       Bom dia, sou novo no Arduíno e estou com uma série de dúvidas a respeito do programa que pretendo montar. Vamos lá, a ideia é controlar circuitos diferente com condições de acionamentos diferentes através da internet e armazenar numa memória o período (em tempo real) em que houve algum tipo de ação via web/ aplicativo. 

       O que eu consegui foi testar a lógica dando comandos pela Porta Serial, porém não consegui fazer um loop dos acionamentos sem depender da entrada na Porta Serial e também estou usando o delay ao invés do millis(), pois não soube usar da maneira correta nesta lógica.

      Desde já agradeço qualquer dica que possa me ajudar a construir a lógica necessária (a parte do ethernet, memória e outros ainda verei com calma mais tarde).

 

Exibições: 525

Anexos

Responder esta

Respostas a este tópico

Já mudei Rui, obrigado pela dica.

Quer um timer por software? é bem fácil de usar e resolve de vez teu problema, veja as instruções de uso aqui: https://fperrotti.wikispaces.com/Classe+RunTimer

Se gostar, o download pode ser feito aqui:

https://fperrotti.wikispaces.com/Bibliotecas+para+Arduino

Francesco, agradeço sua ajuda primeiramente. Gostaria de saber se eu poderia criar mais de uma variável, pois precisarei de duas contagem. Uma no modo relé ON (intervalo de 2h e 45min) e outra com esse mesmo relé OFF (intervalo com 00h e 15min) e isso ficaria dentro de um loop se eu desse um comando de entrada para tal.

No seu exemplo ele nomeia e chama o tm, daí eu posso criar outras variáveis associadas ao RunTimer?

Sim, vc pode criar várias instâncias se quiser. A vantagem de usar classes é que não importa quantas instâncias vc crie, todas compartilham a mesma área de código, só os dados é que ficam separados, então o consumo de memória é baixo para várias instâncias. 

Agora que reparei, esse intervalo é longo demais, a classe foi feita pra funcionar em microssegundos, não chega a duas horas como está, vc teria que fazer uma pequena alteração no código pra trabalhar em millisegundos, aí dá certo.

A alteração é simples, a função micros() é chamada em 3 linhas do código no arquivo runTimer.cpp, onde está micros() vc teria que substituir por millis() e lembrar que o tempo agora é informado em milissegundos.

Obrigado Francesco, vou tentar aqui.

Mais uma coisa, se é o mesmo relê que vai ser controlado pelo timer, vc não precisa de duas instâncias, vc só precisa de uma instância que funcione em intervalos diferentes conforme o caso. O start() não precisa estar no setup(), vc pode mudar o intervalo a qualquer momento. O tempo começa a ser contado a partir do momento que vc chama o start().

Então eu preciso acionar 4 reles diferentes em 4 modulos (4x4 = 16 relés), mas o que vai diferenciar é o tipo de intervalo que cada um vai ficar. Alguns vão ficar ligados direto e outros com um ciclo de ligação. porém todos estão sujeitos a receber esse ciclo ou essa ligação contínua. Preciso determinar um intervalo para ligado e outro para desligado, mas esse ciclo ficaria dentro de um comando único que vai vir da internet/celular. Por exemplo:

ligaled11 // vai ligar o rele 1 do modulo 1 continuamente;

ou

ligacfl13 // vai ligar o rele 1 do modulo 3 num ciclo com o intervalo x rele on e y rele off (loop) desse intervalo

Bom dia,

Porque não faz tudo isso usando um site de IoT e um aplicativo como o Cayenne por exemplo

Link para um dos meus videos AQUI           Usando Threads    Ivan Seidel threads

Todos meus videos AQUI

Abs.

CK

Carlos, obrigado. Vou dar uma olhada mais tarde, pois não conheço o IoT ainda, mas acredito que não poderei seguir nessa linha já que o projeto é de uso exclusivo do Arduino.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço