Hoe om de tijd weer voor uw Arduino Klok Project

11/01/2016 by admin

Zodra je iets hebt op het scherm voor uw Arduino Klok Project, is het tijd om de tijd van de RTC module te lezen en weer te geven. Later, je knoppen toe te voegen om het alarm te programmeren, en een schakelaar om te wisselen tussen Time Display, Alarm Set en Alarm Gewapende modi.

Er zijn eigenlijk maar twee dingen die je kunt weergeven met deze klok: ofwel de huidige tijd of de tijd die je wilt dat het alarm afgaat. In plaats waaronder de code voor zowel de hoofdlus (), is het zinvol om de weergave procedure zijn eigen functie gezet.

Voeg de volgende code toe aan het variabele deel declaraties aan de bovenkant van uw code:

RTC_DS1307 rtc; // Maak een realtime klok genaamd rtc
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // Maak een lcd genaamd lcd
DateTime nu;

Dit creëert een DateTime object nu genoemd. Het DateTime object is onderdeel van het RTC bibliotheek en is de enige manier om de tijd te krijgen uit de RTC-module, maar het heeft veel opties en kan uren, minuten, seconden te bieden, en het jaar, de maand en de dag.

Voeg vervolgens de code in uw belangrijkste lus die de huidige tijd van de RTC module leest, en voeg een functie om het scherm met de huidige tijd bij te werken:

leegte loop () {
nu = rtc.now (); // Haal de huidige tijd
// Vernieuw de weergave
updateDisplay ();
}

De nu DateTime object slaat de huidige tijd genomen uit de rtc.now () functie om de tijd weer te geven en te controleren of het tijd is om het alarm te laten afgaan.

Om de code modulair te houden, het bijwerken van de weergave wordt gedaan in zijn eigen functie, buiten de grote lus. Na het sluiten van de hoofdlus, voeg de updateDisplay () functie door het invoeren van de volgende code:

leegte updateDisplay () {
int h = now.hour (); // Haal de uren nu en bewaar ze in een integer genoemd h
int m = now.minute (); // Haal de notulen op dit moment en bewaar ze in een integer genoemd m
int s = now.second (); // Haal de seconden op dit moment en bewaar ze in een integer genoemd s
lcd.setCursor (0, 0); // Zet de cursor in de kolom nul, bovenste rij ...
lcd.print ("De tijd is:"); // ... Met spaties om tekens te wissen uit het instellen van het alarm.
lcd.setCursor (4, 1); // Beweeg de cursor naar kolom vier, onderste rij
if (h <10) {// Voeg nul, indien nodig, zoals hierboven
lcd.print (0);
}
lcd.print (h); // Geef het huidige uur
lcd.setCursor (6, 1); // Ga naar de volgende kolom
lcd.print (""); // En print de dikke darm
lcd.setCursor (7, 1); // Ga naar de volgende kolom
if (m <10) {// Voeg nul, indien nodig, zoals hierboven
lcd.print (0);
}
lcd.print (m); // Geeft de huidige minuut
lcd.setCursor (9, 1); // Ga naar de volgende kolom
lcd.print (""); // En print de dikke darm
lcd.setCursor (10, 1); // Ga naar de volgende kolom
if (B <10) {// Voeg nul, indien nodig, zoals hierboven
lcd.print (0);
}
lcd.print (s); // Geef het huidige tweede
}

Stuur deze code naar je Arduino en zie wat er gebeurt. Als alles goed is en uw code correct compileert, moet je in het bedrijfsleven! Het display moet een tijd die overeenkomt met de op uw computer te tonen.

In de code, wordt de huidige tijd opgevraagd bij de nu bezwaar en geplaatst in drie integer variabelen alleen gebruikt in de updateDisplay functie. Deze variabelen hebben een lokale scope, wat betekent dat ze alleen binnen updateDisplay () kan worden gebruikt, en de rest van het programma niet weet niets over hen - wat verklaart waarom ze niet aan het begin van je code worden gedeclareerd.

U vraagt ​​tijd minuten, uren en seconden apart met now.hours (), now.minutes (), en now.seconds (). Toewijzen elk van deze afzonderlijk zijn eigen integervariabele (u, m en s) veel gemakkelijker dan vraagt ​​de huidige tijd tegelijk.

Na ontleed de tijd in drie variabelen, is het belangrijkste wat er aan de hand in updateDisplay () positioneren van de cursor op het LCD-scherm en de relevante tekst afdrukt. De cursor positioneren geschiedt met lcd.setCursor (), die twee parameters draait: kolomnummer en regelnummer. De cursor instelling wordt alleen in de juiste positie.

Je moet dan het scherm wat te printen vertellen. De nummering begint bij nul, zodat de bovenste meest linkse karakter is in kolom 0 en rij 0. De cursor staat in de linkerbovenhoek van het scherm en de eerste regel van de tekst wordt bedrukt met lcd.print ("De tijd is:" ).

Je kon de lcd.clear () functie, die alle tekst op het hele scherm leeggemaakt gebruiken. Echter, wordt uw klok voortdurend vernieuwen van de weergave, zodat het wissen van het LCD-scherm elke keer dat de updateDisplay () functie uitvoert kan gewoon een beetje merkbaar flikkeren introduceren. Een eenvoudiger benadering (waarvan één minder instructie gebruikt) is alleen maar om de ruimte tekens over wat er mogelijk al op het scherm geweest schrijven.

Vervolgens wordt de cursor vier plaatsen naar rechts verplaatst en op de tweede rij, zodat het tijd wordt gecentreerd op het scherm:

lcd.setCursor (4,1);

Een lastige beetje over het gebruik van gehele getallen om de uren, minuten en seconden te krijgen, is dat ze niet hebben een nul voor waarden onder de 10. U moet deze handmatig toe te voegen, zowel om de klok kijk naar rechts (bijvoorbeeld 01 : 05) en de uren minuten en seconden op dezelfde plaats op het scherm te houden.

Het toevoegen van de voorloopnullen wordt bereikt op dezelfde manier voor uren, minuten en seconden:

if (h <10) {// Voeg nul, indien nodig, zoals hierboven
lcd.print (0);
}
lcd.print (h); // Geef het huidige uur

De voorwaardelijke if testen of de huidige tijd minder is dan 10, en zo ja, de print () statement drukt een nul. Na deze, de LCD automatisch door naar de volgende kolom positie, dus als je het huidige uur, opgeslagen in de integer variabele h af te drukken, zal het een nul hebben. Hetzelfde geldt voor de minuten en seconden.

U moet ook de cursor naar de juiste positie voor de eerste nul voor de minuten en seconden. U plaatst een dubbele punt tussen hen met de lcd.print (":"); statement.

Related Posts