Staram się otwierać i zamykać małe drzwi, które powinny się otwierać lub zamykać co 12 godzin. Zastanawiałem się, czy mógłbym po prostu zrobić mały skrypt z zapętleniem z opóźnieniem () na 12 godzin, opóźnienie (43 200 000 000); Zgaduję? Nie mam jednak pojęcia, czy jest to możliwe i / lub godne polecenia. Przydatne byłyby jakieś opinie / alternatywy (w razie potrzeby) :)
arduino-uno
timers
Fred Pannekoek
źródło
źródło
Odpowiedzi:
Metoda zegara czasu rzeczywistego jest najdokładniejszym sposobem, ale w przeciwnym razie jest używana
millis
Opóźni to do ok. 4294967295ms (2 ^ 32-1) lub 49 dni, po upływie których czasomierz dogoni wartość do
startMillis
źródło
delay(LONG_DELAY_MS)
? Arduino realizacja akceptuje niepodpisanych tęskni. Nie jestem też do końca pewien, czy kod działa poprawnie, gdy jestmillis()
zawijany, i jest mniejszy niżstartMillis
delay()
ma swoje zastosowania, ale w przypadku długich opóźnień nie jest to dobre. Mówi po prostu mikrokontrolerowi, aby nic nie robił dlax
cykli zegara. W tym czasie Twoje Arduino nie może zrobić nic więcej.Najlepszym rozwiązaniem byłoby użycie zegara czasu rzeczywistego (RTC). Te chipy są specjalnie zaprojektowane, aby śledzić czas, i możesz łatwo podłączyć je do swojego Arduino. Oto przykład, jak możesz to zrobić.
źródło
Możesz użyć przerwania watchdoga i uśpić MCU podczas oczekiwania i oszczędzać energię.
Zauważ jednak, że oszczędzasz energię tylko wtedy, gdy Twoja tablica również ją oszczędza. Oznacza to, że zamiast zwykłych regulatorów wyposażonych w najpopularniejsze płyty Arduino, takie jak Uno, musisz mieć regulator niskiego napięcia spoczynkowego. W przeciwnym razie nie ma znaczenia, czy MCU oszczędza energię, jeśli Twoja płyta nie.
Oto kod (nieprzetestowany):
Kod, który skopiowałem, pochodzi z tej strony: Low-Power Arduino using the Watchdog Timer .
źródło
Czy masz dostęp do snu (bez znaku w ciągu kilku sekund)?
Jeśli nie, pozwoli to na bardzo długie opóźnienie ():
źródło
To zadziała:
źródło
Po prostu używam pętli, gdy nie chcę robić rzeczy pomiędzy:
źródło
delay(43200000)
.