Arduino ledde matrisen klockan (5 / 5 steg)
Steg 5: LED klocka skissen
/ * Denna skiss körs en klocka med fem ledde matriser utifrån MAX72xx chipset.
Ett exempel som visar skrift och rullas text längs 4 ledde matriser visas på
Denna skiss använder LedControlMS.h (från Makerspace) från sidan ovan, en modificarion av LEDControl.h bibliotek.
Denna skiss använder Arduino tid & wire bibliotek och DS3131RTC (DS3232RCTC bibliotek)
Skiss antar följande ledningar för MAX72xx LED matriser--
PIN 12 är ansluten till DataIn
stift 11 är ansluten till CLK
PIN 10 är ansluten till belastning
Dataout (mellersta utgångsstiftet) är seriekopplas till DataIn nästa led för varje matris utom sist.
Ledningar för DS3231RTC
VCC och marken är anslutna till + 5VDC och Gnd, respektive
Klockan SDA -> Analog 4
SCL -> Analog 5
*/
#include < DS3232RTC.h > / / DS3232RTC klockan biblioteket som också hanterar DS3231RTC
#include < Time.h > //Used för klocka
#include < Wire.h > //Used för klocka
#include "LedControlMS.h" / / OBS att detta inte är biblioteket LEDControl
int h1, h2, m1, m2. Varje LED-matris visas ett nummer: timme 1 & 2, minut 1 & 2. Dessa variabler hålla de enda siffrorna
int s1 = 2; LED som räknas av i sekunder
int hr12; För 12 timmars tid
int noMatrix = 5; Antal matriser. Biblioteket tar upp till 8.
Boolean är = sant; Att markera är eller pm. initiera som är
LedControl lc=LedControl(12,11,10,noMatrix); PIN uppdrag och antal matriser (5)
void setup() {
För det första ange systemtid till ett hårdkodat datum och tid, och sedan ger RTC från systemtiden.
Funktionen setTime() ingår i tid biblioteket.
HR Min SEK dd mm åååå
setTime (18, 18, 30, 25, 11, 2014); Manuellt ställa in Arduino klocka
RTC.set(now()); Ange RTC från systemtiden
Initiera MAX72XXs (i energisparande läge vid start - väckarklocka.
för (int jag = 0; jag < noMatrix; i ++) {//For varje av matriserna...
LC.Shutdown(i,false);
lc.setIntensity(i,1); Ställa in ljusstyrka till ett lågt värde
lc.clearDisplay(i); Avmarkera Visa
}
Delay(100); Vänta mellan uppdateringar av displayen
lc.clearAll();
}
void loop() {
Am eller pm Boolean (am initierades som sant)
om (hour() > 12)
{är = false;
hr12 = (timme)-12;
}
/ * Isolera timmar och minuter, en siffra till varje ledde matrisen.
Jag tror en ensiffriga timmar ser bättre med en tom första siffran.
*/
Placera varje siffra i timmen i sin egen variabel, h1 och h2
om (hr12 < 10)
{
/*
Tomt 1: a ledde matrisen om < 10 timmar. (62 är ett tomt tecken.)
Kan också infoga en nolla, som med minuter.
*/
H1 = 151;
H2 = hr12; 2. LED visar ensiffriga timme
}
annat
{
Othewise, bara använda två siffrorna i timmen på h1 och h2.
H1 = hr12/10. Heltalsdivision med 10 returnerar den första siffran i timmen.
H2 = hr12% 10. Returnerar den 2: a siffran modulo division med 10.
}
Minuter visas av m1 och m2
om (minute() < 10)
{
M1 = 0; Första minuten LED d1splays noll
m2=Minute(); 2: a siffran i minuter
}
annat
{
M1 = minut () / 10;
m2=Minute() % 10.
}
/*
Visar timmar och minuter med funktionen displayChar. Här används två heltal argument:
LED matrix nummer (0-7) och tecknet som ska visas. Tal visas helt enkelt
genom att skicka numret sig som 2: a argument: det vill säga lc.displayChar(0,h1)
*/
lc.displayChar(0,h1); Timmar 1 siffra till vänster (#0) ledde.
lc.displayChar(1,h2); Timmar 2 siffrigt till LED #1
lc.displayChar(3,m1); Minuter 1 siffra och lysdiod #3. (Minns att #2 för att markera ut sekunderna.)
lc.displayChar(4,m2); Minuter 1 siffra till #4
/ * Denna rutin avgör vilken singel ledde till ljus att räkna bort sekunderna.
Den mellersta LED räknar bort sekunderna av lysande en enda LED i taget
över alla de 8 raderna. Räkna 8 lysdioder över udda rader och 7 även radvis.
Två rader räknas således 15 sekunder.
*/
för (int r = 7; r > -1; r--) {//For varje i 8 rader, start från toppen (#7)...
för (int c = 0; c < 8; c ++) {//For av 8 lysdioder i rad (0 vänster)...
/*
Belysa prick på aktuell kolumn och rad. Dessa tycks bytas på min hårdvara.
Jag bytte därför argument till funktionen setLed() nedan.
Ordentligt, den riktar sig som setLed (int ledde #, int rad, int col, boolean).
Variabel s1 innehar LED antalet (räknat från 0) ledde matrisen används för detta.
*/
om (r %2 == 0 & & c == 7) //Even rad och col 7
{}
annat
lc.setLed(s1,c,r,true); Aktivera adresserade LED för 3/4 SEK
Delay(750);
lc.setLed(s1,c,r,false); Inaktivera för 1/4 SEK
Delay(250);
}
}
}
}