Hvordan Viser Time for din Arduino Clock Prosjekt

July 11  by Eliza

Når du har noe på skjermen for din Arduino Clock Project, er det på tide å lese tiden fra RTC-modulen og vise det. Senere, legger du knapper for å programmere alarmen, og en bryter for å skifte mellom Time Display, Alarm Set, og Alarm Væpnede moduser.

Det er egentlig bare to ting du kan vise med denne klokken: enten den nåværende tid eller tiden du ønsker at alarmen skal gå av. Snarere enn inkludert koden for både i hoved loop (), er det fornuftig å sette displayet prosedyre i sin egen funksjon.

Legg til følgende kode i den variable erklæringer delen på toppen av koden din:

RTC_DS1307 RTC; // Lag en sanntidsklokke som heter RTC
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // Opprett en LCD kalt lcd
Datetime nå;

Dette skaper en Datetime objekt kalt nå. Datetime objekt er en del av RTC biblioteket og er den eneste måten å få tid ut av RTC-modulen, om det har en rekke alternativer og kan gi timer, minutter, sekunder, og år, måned og dag.

Deretter legger du inn koden i hoved løkke som leser gjeldende tid fra RTC-modulen, og legge til en funksjon for å oppdatere skjermen med gjeldende klokkeslett:

void loop () {
nå = rtc.now (); // Få gjeldende klokkeslett
// Oppdater displayet
updateDisplay ();
}

Den nå Datetime objekt lagrer gjeldende tid tatt fra rtc.now () -funksjonen for å vise tid og for å sjekke om det er på tide å utløse alarmen.

For å holde kodemodul, oppdaterer displayet gjort i sin egen funksjon, utenfor hovedsløyfen. Etter stengetid hoved sløyfe, legger updateDisplay () -funksjonen ved å skrive inn følgende kode:

ugyldig updateDisplay () {
int h = now.hour (); // Få timer akkurat nå, og lagre dem i et heltall kalles h
int m = now.minute (); // Få minutter akkurat nå, og lagre dem i et heltall kalles m
int s = now.second (); // Få sekunder akkurat nå, og lagre dem i et heltall kalles s
lcd.setCursor (0, 0); // Sett markøren på kolonnen null, øvre rad ...
lcd.print ("Klokken er:"); // ... Med mellomrom for å fjerne karakterer fra å sette alarm.
lcd.setCursor (4, 1); // Flytt markøren til kolonne fire, nedre rad
hvis (h <10) {// Legg til en null, om nødvendig, som angitt ovenfor
lcd.print (0);
}
lcd.print (h); // Vise gjeldende time
lcd.setCursor (6, 1); // Flytt til neste kolonne
lcd.print (":"); // Og skrive kolon
lcd.setCursor (7, 1); // Flytt til neste kolonne
if (m <10) {// Legg til en null, om nødvendig, som angitt ovenfor
lcd.print (0);
}
lcd.print (m); // Vise gjeldende minutt
lcd.setCursor (9, 1); // Flytt til neste kolonne
lcd.print (":"); // Og skrive kolon
lcd.setCursor (10, 1); // Flytt til neste kolonne
if (s <10) {// Legg til en null, om nødvendig, som angitt ovenfor
lcd.print (0);
}
lcd.print (s); // Vise gjeldende andre
}

Send koden til din Arduino og se hva som skjer. Hvis alt er vel og koden kompilerer riktig, bør du være i business! Displayet bør vise en tid som passer til en på din datamaskin.

I koden, vil den nåværende tiden spurt fra nå protesterer og plassert inn i tre heltallsvariabler brukes bare i updateDisplay funksjon. Disse variablene har en lokal omfang, noe som betyr at de bare kan brukes innenfor updateDisplay (), og resten av programmet ikke vet noe om dem - noe som forklarer hvorfor de ikke er deklarert i begynnelsen av koden din.

Du be om tids minutter, timer og sekunder separat med now.hours (), now.minutes (), og now.seconds (). Tilordne hver av disse separat til sin egen heltall variabel (h, m, og s) er mye enklere enn å be om gjeldende klokkeslett på en gang.

Etter å ha analysert den gang inn i tre variabler, er det viktigste som skjer i updateDisplay () plassere markøren på skjermen og utskriften av relevant tekst. Plassere markøren er gjort med lcd.setCursor (), som tar to parametre: kolonnenummer og linjenummer. Stille markøren bare setter den i riktig posisjon.

Du må da fortelle skjermen hva du skal skrive ut. Nummereringen starter på null, så det øverste lengst til venstre karakter er i kolonne 0 og rad 0. Markøren er plassert øverst til venstre på skjermen, og den første linjen med tekst er skrevet med lcd.print ("Klokken er:" ).

Du kan bruke lcd.clear () -funksjonen, som sletter all tekst på hele skjermen. Imidlertid er din klokke stadig forfriskende displayet, så tømme LCD hver gang de updateDisplay () -funksjonen Utfører kan introdusere bare litt merkbar flimring. En enklere tilnærming (som bruker en mindre instruksjon) er bare å skrive mellomromstegnene enn hva som kunne ha vært allerede på displayet.

Deretter flyttes markøren fire mellomrom til høyre og på den andre raden, slik at tiden som er sentrert på skjermen:

lcd.setCursor (4,1);

Ett vanskelige biten om å bruke heltall for å få timer, minutter og sekunder, er at de ikke har en ledende null for verdier under 10. Du må legge de inn manuelt, både for å gjøre klokke ser rett (for eksempel 01 : 05) og for å holde timer minutter og sekunder på samme sted på skjermen.

Legge nuller er oppnådd på samme måte for timer, minutter og sekunder:

hvis (h <10) {// Legg til en null, om nødvendig, som angitt ovenfor
lcd.print (0);
}
lcd.print (h); // Vise gjeldende time

Den betingede hvis setningen tester om den aktuelle tiden er mindre enn 10, og hvis så, skriver print () statement en null. Etter dette, går du automatisk tilbake til neste kolonne posisjon, så når du skriver ut den gjeldende time, lagret i heltallsvariabelen h, vil det ha en ledende null. Det samme gjelder for minutter og sekunder.

Du må også flytte markøren til riktig posisjon for den første nullen i minutter og sekunder. Du setter inn et kolon mellom dem med lcd.print (":"); uttalelse.