Schritt 5: Die LED Uhr Skizze
/ * Diese Skizze läuft eine Uhr mit fünf LED-Matrizen, basierend auf MAX72xx-Chipsatz.
Ein Beispiel, das zeigt schreiben und scrollt Text über 4 LED Matrizen wird angezeigt
Diese Skizze verwendet die LedControlMS.h (von Makerspace) aus der Seite oben, eine Modificarion der LEDControl.h Bibliothek.
Diese Skizze verwendet die Arduino-Zeit & Draht-Bibliotheken und die DS3131RTC (DS3232RCTC-Bibliothek)
Skizze übernimmt die folgende Leitungen für die MAX72xx LED - Matrizen
Pin 12 ist mit der DataIn verbunden.
Pin 11 ist mit dem CLK verbunden.
PIN 10 ist Belastung verbunden.
DataOUT (mittlere Ausgangs-Pin) ist verkettet, DataIn der nächsten LED für jede Matrix mit Ausnahme des letzten.
Verkabelung für die DS3231RTC
VCC und Boden sind mit verbunden + 5VDC und Gnd, bzw.
Uhr SDA--> Analog 4
SCL -> Analog 5
*/
< DS3232RTC.h > #include / / DS3232RTC Uhr-Bibliothek, die auch DS3231RTC behandelt
#include < Time.h > //Used für Uhr
#include < Wire.h > //Used für Uhr
#include "LedControlMS.h" / / beachten Sie, dass dies nicht Bibliothek LEDControl
Int h1, h2, m1, m2; Jede LED-Matrix wird eine Nummer angezeigt: Stunde 1 & 2, Minute 1 & 2. Diese Variablen enthalten die einzelnen Ziffern
Int s1 = 2; LED, die die Sekunden zählt
Int hr12; Verwendet für 12 Stunden
Int NoMatrix = 5; Anzahl der Matrizen. Die Bibliothek befasst sich mit bis zu 8.
Boolescher Wert bin = True; Anlässlich bin oder Uhr Initialize wie bin
LedControl lc=LedControl(12,11,10,noMatrix); Pin-Zuordnung und Anzahl der Matrizen (5)
void setup() {}
Stellen Sie zuerst die Systemzeit in eine hartcodierte Datum und Uhrzeit sowie dann die RTC-Sets aus der Systemzeit.
Die setTime()-Funktion ist Teil der Zeit-Bibliothek.
H Min Sec TT mm JJJJ
SetTime (18, 18, 30, 25, 11, 2014); Arduino Uhr manuell einstellen
RTC.set(now()); die RTC aus der Systemzeit einstellen
Initialisieren des MAX72XXs (im Energiespar-Modus beim Start--Reaktivierung.
für (Int ich = 0; ich < NoMatrix; i ++) {//For der Matrizen...
LC.Shutdown(i,false);
lc.setIntensity(i,1); Helligkeit auf einen niedrigen Wert einstellen
lc.clearDisplay(i); Deaktivieren Sie die Anzeige
}
Delay(100); Zwischen den Aktualisierungen der Anzeige warten
lc.clearAll();
}
void loop() {}
Eingestellt am oder pm Boolean (bin als True initialisiert wurde)
Wenn (hour() > 12)
{bin = False;
hr12 = (Stunde)-12;
}
/ * Isolieren von Stunden und Minuten, eine Ziffer zu jeder LED-Matrix.
Ich denke, eine einstelligen Stunden mit einer leeren ersten Ziffer besser aussieht.
*/
Legen Sie jede Ziffer der Stunde in eine eigene Variable, h1 und h2
Wenn (hr12 < 10)
{
/*
1. LED-Matrix leer, wenn < 10 Stunden. (62 ist ein Leerzeichen.)
Wie bei Minuten könnte auch eine Null eingefügt werden.
*/
H1 = 151;
H2 = hr12; 2. LED-Anzeigen einstelligen Stunden
}
anderes
{
Othewise, nur Gebrauch die beiden Ziffern der Stunde auf h1 und h2.
H1 = hr12/10; Ganzzahlige Division durch 10 gibt die erste Ziffer der Stunde zurück.
H2 = hr12 % 10; Modulo-Division durch 10 kehrt die 2. Stelle.
}
Minuten werden von m1 und m2 angezeigt.
Wenn (minute() < 10)
{
M1 = 0; Ersten Minute LED d1splays Null
m2=Minute(); 2. Stelle von Minuten
}
anderes
{
M1 = Minute () / 10;
m2=Minute() 10 %;
}
/*
Anzeige von Stunden und Minuten mit der DisplayChar-Funktion. Dies nutzt zwei ganzzahlige Argumente:
die LED-Matrix-Ziffer (0-7) und das Zeichen angezeigt werden. Zahlen werden einfach angezeigt.
indem man die Zahl selbst als 2. Argument: das heißt, lc.displayChar(0,h1)
*/
lc.displayChar(0,h1); Stunden geführt 1 Ziffer ganz links (# 0).
lc.displayChar(1,h2); Stunden 2 stellige LED # 1
lc.displayChar(3,m1); LED #3 Minuten 1 Ziffer. (Daran erinnern Sie, dass #2 verwendet wird, um die Sekunden markiert.)
lc.displayChar(4,m2); #4 Minuten 1 Ziffer
/ * Diese Routine bestimmt, welche einzelne ans Licht geführt, um die Sekunden zu zählen.
Die mittlere LED zählt die Sekunden durch eine einzelne LED gleichzeitig leuchten
über jede der 8 Zeilen. 8 LEDs über ungerade Zeilen und 7 über geraden Zeilen zählen.
So zählen zwei Reihen 15 Sekunden.
*/
für (Int R = 7; R >-1; R--) {//For von 8 Zeilen von oben nach unten (#7)...
für (Int c = 0; C < 8; c ++) {//For der 8 Leds hintereinander (0 links)...
/*
Punkt auf aktuelle Spalte und Zeile zu beleuchten. Diese scheinen auf meiner Hardware ausgetauscht werden.
Deshalb tauschte ich die Argumente der setLed() Funktion unten.
Richtig, es richtet sich als SetLed (Int led #, Int Row, Int Col, Boolean).
Variable s1 hält die LED-Ziffer (beginnend mit 0), der dafür eingesetzten LED-Matrix.
*/
Wenn (R %2 == 0 & & C == 7) //Even Zeile und Col 7
{}
anderes
lc.setLed(s1,c,r,true); Aktivieren Sie adressierten LED für 3/4 Sek.
Delay(750);
lc.setLed(s1,c,r,false); Schalten Sie für 1/4 Sek.
Delay(250);
}
}
}
}