Stap 5: Krijgen echt met tijd - het toevoegen van een Real timerklok
Onderhand, zou u de beperkingen van een gesimuleerde klok software moet realiseren. Hoe is een horloge of telefoon houden nauwkeurige tijd? Eerst, moet u een ononderbroken voeding, en ten tweede, moet u een nauwkeurige kristal. Een real-time klok module zorgt dit voor ons. Zodra het is ingesteld, zolang het is een kleine batterij capaciteit biedt, zal het tijd nauwkeurig houden aan enkele seconden per dag.
Adafruit van RTC module maakt gebruik van dezelfde I2C bus die gebruikmaakt van het display. Hoe werkt dit? Elk item heeft een uniek adres, en de bibliotheken omgaan met de rest van ons.
// Start the Real Time Clock<br> RTC_DS1307 rtc = RTC_DS1307();
In Setup moeten we om te controleren of de klok wordt uitgevoerd en ingesteld als het niet. Vervolgens initialiseren we de variabele met behulp van de huidige tijd.
// start and set clock if not already running<br> rtc.begin(); bool setClockTime = !rtc.isrunning(); Serial.print("rtc.isrunning() ="); Serial.println(!setClockTime); if (setClockTime) { rtc.adjust(DateTime(uploadDateTime)); } // initalize time variables DateTime time = rtc.now(); hours = time.hour(); minutes = time.minute(); seconds = time.second(); lastMillis = millis();
We moeten controleren van de RTC tijd elke zo vaak aangezien wij nog steeds op de interne teller tot toename seconden rekenen. Hoe vaak? Hoe ongeveer één keer per uur:
// Check RTC at top of hour and reset variables<br> if (minutes == 0 && seconds == 0){ DateTime time = rtc.now(); hours = time.hour(); minutes = time.minute(); seconds = time.second(); }
Tijd om te verkennen:
- De RTC-modules bevat ook informatie over de datum. Hoe zou u een alarm instellen voor weekdagen alleen?
- Hoe nauwkeurig is de RTC-module?
- De code voor tijdvariabelen instellen in Setup en loop bijna identiek zijn. Kunnen we een functie gebruikt door beide maken?