Estou tentando fazer uma pequena porta de abertura e fechamento que deve abrir ou fechar a cada 12 horas. Fiquei pensando se eu poderia criar um pequeno script em loop com um atraso () por 12 horas, um atraso (43 200 000 000); Eu acho? No entanto, não tenho idéia se isso é possível e / ou recomendável. Algum feedback / alternativas (se necessário) seria bom :)
arduino-uno
timers
Fred Pannekoek
fonte
fonte
Respostas:
O método do relógio em tempo real é a maneira mais precisa, mas caso contrário, use
millis
Isso atrasará até aprox. 4294967295ms (2 ^ 32-1) ou 49 dias, após os quais o cronômetro alcançará o valor de
startMillis
fonte
delay(LONG_DELAY_MS)
? A implementação do arduino aceita longos não assinados. Eu também não estou inteiramente certeza de que o código funciona corretos quandomillis()
envolve, e é menor do questartMillis
delay()
tem seus usos, mas por longos atrasos não é bom. Simplesmente diz ao microcontrolador que não faça nada pelosx
ciclos do relógio. Durante esse período, o seu Arduino não pode fazer mais nada.Sua melhor aposta seria usar uma coisa chamada Real Time Clock (RTC). Esses chips são feitos especificamente para acompanhar o tempo e você pode conectá-los ao seu Arduino com facilidade. Aqui está um exemplo de como você pode fazer isso.
fonte
Você pode usar a interrupção do watchdog e fazer com que o MCU durma enquanto aguarda e economize energia.
Mas observe que você só economizará energia se sua placa também a economizar. Isso significa que você precisa ter um regulador de tensão quieta baixa em vez dos reguladores usuais que equipam as placas Arduino mais comuns, como a Uno. Caso contrário, não importa se o seu MCU economiza energia se a sua placa não.
Aqui está o código (não testado):
O código que copiei é desta página: Arduino de baixa potência usando o timer do Watchdog .
fonte
Você tem um sono (segundos não assinados) disponível?
Caso contrário, você poderá atrasar () muito tempo:
fonte
Isso funcionará:
fonte
Eu apenas uso para loops quando não quero fazer coisas no meio:
fonte
delay(43200000)
.