Stap 5: De LED klok schets
/ * Deze schets loopt een klok met vijf LED matrices gebaseerd op MAX72xx-chipset.
Een voorbeeld dat toont schrijven en schuiven in de tekst over de 4 LED matrices wordt weergegeven op
Deze schets worden de LedControlMS.h (van IRL) uit de pagina boven, een modificarion van de LEDControl.h-bibliotheek gebruikt.
Deze sketch maakt gebruik van de Arduino tijd & draad Bibliotheken, en de DS3131RTC (DS3232RCTC Library)
Schets wordt ervan uitgegaan dat de volgende bedrading voor de MAX72xx LED-matrices--
pin 12 is aangesloten op de DataIn
PIN 11 is aangesloten op de CLK
pin 10 is aangesloten op LOAD
Dataout (middelste uitgang pins) is spelpoortadapters aan de DataIn van de volgende LED voor elke matrix behalve de laatste.
Bedrading voor de DS3231RTC
VCC en grond zijn aangesloten op + 5VDC en Gnd, respectievelijk
Klok SDA--> analoge 4
SCL -> analoge 5
*/
#include < DS3232RTC.h > / / DS3232RTC klok bibliotheek die ook DS3231RTC verwerkt
#include < Time.h > //Used voor klok
#include < Wire.h > //Used voor klok
#include "LedControlMS.h" / / Let op dit is geen bibliotheek LEDControl
int h1, h2, m1, m2; Elke LED-matrix verschijnt één nummer: uur 1 & 2, minuut 1 & 2. Deze variabelen houden de interne cijfers
int s1 = 2; LED die af de seconden telt
int hr12; Voor 12 uur keer gebruikt
int noMatrix = 5; Aantal matrices. De bibliotheek richt zich tot 8.
Boolean ben = true; Ter gelegenheid van am of pm. initialiseren als ben
LedControl lc=LedControl(12,11,10,noMatrix); Pin-toewijzingen en aantal matrices (5)
VOID Setup {}
Stel eerst de systeemtijd aan een hardcoded datum en tijd, en wordt vervolgens ingesteld het RTC van de systeemtijd.
De functie setTime() is onderdeel van de bibliotheek van de tijd.
HR Min Sec dd mm jjjj
setTime (18, 18, 30, 25, 11, 2014); Arduino klok handmatig instellen
RTC.set(now()); de RTC instellen van de systeemtijd
Initialiseren van de MAX72XXs (in de energiebesparende modus bij het opstarten--activeringsvraag.
for (int i = 0; ik < noMatrix; i ++) {//For elk van de matrices...
LC.shutdown(i,false);
lc.setIntensity(i,1); Helderheid ingesteld op een lage waarde
lc.clearDisplay(i); Schakel het weergeven
}
delay(100); Wachttijd tussen updates van het display
lc.clearAll();
}
void loop {}
Am of pm Boolean ingesteld (ben is geïnitialiseerd als waar)
Als (uur() > 12)
{ben = false;
hr12 = (uur)-12;
}
/ * Isoleren uren en minuten, één cijfer op elke LED-matrix.
Ik denk dat een uur één cijfer ziet er beter uit met een lege eerste cijfer.
*/
Elk cijfer van het uur plaats in zijn eigen variabele, h1 en h2
Als (hr12 < 10)
{
/*
1ste LED matrix leeg als < 10 uur. (62 is een leeg teken.)
Kon ook invoegen een nul, zoals met de minuten.
*/
H1 = 151;
H2 = hr12; 2e LED geeft één cijfer van uur
}
anders
{
Othewise, enkel gebruik de twee cijfers van het uur over h1 en h2.
H1 = hr12/10; Geheel getal delen door 10 geeft als resultaat het eerste cijfer van het uur.
H2 = hr12% 10; Modulo deling door 10 geeft als resultaat het 2e cijfer.
}
Minuten worden weergegeven door m1 en m2
Als (minute() < 10)
{
M1 = 0; Eerste minuut LED d1splays nul
m2=Minute(); 2e cijfer van minuten
}
anders
{
M1 = minuut () / 10;
m2=Minute() % 10;
}
/*
Weergegeven hoeveel uren en minuten met behulp van de functie displayChar. Deze maakt gebruik van twee integer argumenten:
de LED matrix nummer (0-7) en het teken moet worden weergegeven. Getallen worden gewoon weergegeven
door het passeren van het nummer zelf als de 2e argument: dat wil zeggen, lc.displayChar(0,h1)
*/
lc.displayChar(0,h1); Uren 1 cijfer op meest linkse (#0) leidde.
lc.displayChar(1,h2); Uur 2 cijfer tot en met LED #1
lc.displayChar(3,m1); Minuten 1 cijfer tot en met LED #3. (Herinneren dat #2 wordt gebruikt om te markeren de seconden.)
lc.displayChar(4,m2); Minuten 1 cijfer tot en met #4
/ * Deze routine bepaalt welke single leidde tot licht te tellen uit de seconden.
De middelste LED telt af de seconden door het verlichten van een enkele LED tegelijk
over elk van de 8 rijen. Rekenen 8 LEDs in de oneven rijen, en 7 op even rijen.
Dus, twee rijen tellen 15 seconden.
*/
voor (int r = 7; r > -1; r--) {//For elke 8 rijen, vanaf de bovenkant (#7)...
voor (int c = 0; c < 8; c ++) {//For elk van de 8 leds in een rij (0 op links)...
/*
Stip op de huidige kolom en rij te verlichten. Deze lijken te worden uitgewisseld op mijn hardware.
Ik geruild daarom de argumenten van de functie setLed() hieronder.
Goed, het wordt aangesproken als setLed (int onder leiding #, boolean, int rij, int col).
Variabele s1 bevat het nummer van de LED (geteld vanaf 0) van de LED-matrix hiervoor gebruikt.
*/
Als (r %2 == 0 & & c 7 ==) //Even rij en col 7
{}
anders
lc.setLed(s1,c,r,true); Aan de orde komen LED inschakelen voor 3/4 sec
delay(750);
lc.setLed(s1,c,r,false); Zwenking vandoor voor 1/4 sec
delay(250);
}
}
}
}