Arduino: relé e millis()

postado em: Blog, Processos | 7

Usar o relógio interno do Arduino com o metodo millis() permite criar algoritmos que podem rodar simultaneamente em paralelo, o que não acontece quando usamos delay(), que “pausa” o Arduino por um tempo determinado.

Abaixo um código exemplo para o terrário do NANO, onde ligamos e desligamos uma lâmpada de 8 em 8 horas (mas que poderia ser qualquer intervalo de tempo). A partir desse modelo pode-se criar outras variáveis e ciclos para controlar outros relés (para água por exemplo), e outros dispositivos.

uma explicação rápida:
usamos unsigned long para guardar valores positivos muito longos, adequado para guardar o valor de millis(), que retorna o tempo sempre em milisegundos (1000 equivale a um segundo).
para ler mais facilmente os intervalos, multiplicamos valores como 10 * 1000; mas em C, para definir um número longo a partir de uma operação matemático, precisamos indicar o tipo dos valores, no caso L de long; 10L * 1000L seriam 10.000 milisegundos (= 10 segundos). 8 horas seriam como colocamos: 8L (horas) * 60L (minutos em uma hora) * 60L (segundos em um minuto) * 1000L (milisegundos em um segundo)
criamos o método print_clock, que recebe como parametro um unsigned long e envia para porta serial o cálculo do tempo em que o programa está rodando. criar os próprios métodos ajuda a manter o código modular, fácil de ser transportado para outros programas.
o ciclo só é executado quando a diferença entre o millis atual (tempo) e o millis guardado (tempo_luz) for maior que o ciclo que definimos (tempo_luz_ciclo).
quando o programa começa, tempo_luz é zero, então assim que o millis() atinge um valor maior que tempo_luz_ciclo, ele roda pela primeira vez. aí então ele guarda o valor de tempo_luz pela primeira vez:
depois disso, ele inverte o boleano volt_luz para ligar ou desligar o relé