Pytanie:
Jak uzyskać aktualny czas i datę w Arduino bez zewnętrznego źródła?
Mohamed Mbarki
2016-12-28 23:50:08 UTC
view on stackexchange narkive permalink

Pracuję nad projektem z wykorzystaniem Arduino Uno i osłony karty SD. Chciałbym codziennie przechowywać zmienną o określonej godzinie na karcie SD. Jak mogę sprawdzić aktualny czas w Arduino? Każda pomoc byłaby znacząca.

UWAGA: Arduino NIE jest podłączone do komputera.

Trzy odpowiedzi:
Nick Gammon
2016-12-29 08:41:29 UTC
view on stackexchange narkive permalink

bez zewnętrznego źródła

Nie możesz. Arduino Uno nie ma zegara czasu rzeczywistego. Zegar czasu rzeczywistego to tylko 1 dolar z serwisu eBay. Na przykład DS1307 lub DS3231. Znalazłem 5 płyt wstępnie zmontowanych z chipem zegara, w tym uchwytem baterii, kryształem, chipem i płytką drukowaną za 4,20 USD w serwisie eBay. Baterie nie są dołączone.

Podłącz to do pinów I2C (A4 i A5), ustaw raz za pomocą odpowiedniego szkicu i gotowe.


Jeśli chcesz robić coś co 24 godziny (niekoniecznie o 9:36), możesz po prostu użyć milis , aby sprawdzić, kiedy upłynęła odpowiednia liczba milisekund. Wynik z millis będzie zawijany mniej więcej co 49 dni, ale nie musisz się tym martwić.

Pamiętaj, że to nie pozwoli Ci logować datę i godzinę, ale możesz coś zapisywać (np. temperaturę) każdego dnia, wystarczy wiedzieć, kiedy zacząłeś rejestrować.

Dat Ha
2016-12-28 23:55:16 UTC
view on stackexchange narkive permalink

Wystarczająco dokładnym sposobem jest użycie funkcji millis () . Zwróci wartość w milisekundach od początku Arduino. Jeśli uruchomisz Arduino o określonej godzinie, będziesz mógł obliczyć dokładną datę i godzinę.


Dlaczego nie moduł zewnętrzny? RTC, taki jak DS3231 za jedyne 5 $ i zawiera czujnik temperatury dla Ciebie!

Uważaj, że funkcja millis () zawinie się po około 50 dniach.
@AndreCourchesne: http://arduino.stackexchange.com/questions/12587/how-can-i-handle-the-millis-rollover
A co, jeśli się owinie? Właściwie napisany program zegarowy nie będzie o to dbał.
Justas
2019-05-29 00:08:25 UTC
view on stackexchange narkive permalink

Jedną z możliwości do rozważenia jest użycie 24-godzinnego włączanego timera , który kontroluje zasilanie Uno.

Np. coś, co wygląda tak:

enter image description here

Obwód wyglądałby następująco: Gniazdo sieciowe -> Timer -> Ładowarka USB -> Arduino

Możesz ustawić timer tak, aby wyłączał zasilanie Uno o, powiedzmy, 23:30 i włączał się ponownie o północy.

Przy takiej konfiguracji millis () będzie czasem od ostatniego uruchomienia Uno, który zwykle będzie czasem od poprzedniej północy.

Kiedy debugowania, możesz ustawić czas startu Uno na inny niż północ.

Zastrzeżenia są następujące:

  • Twoja sytuacja pozwala na codzienne 30 minut (lub cokolwiek przyrosty timera to) przestoje
  • Może tolerować przesunięcia timera z powodu przerw w dostawie prądu


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...