

Ziel des Projekts
Auf einer 4-fach LED-Matrix soll die Uhrzeit in digitaler Form angezeigt werden. Die Synchronisation der Zeit übernimmt ein RTC-Modul. Die Zeit kann animiert oder auch ohne Animation dargestellt werden. Das RTC-Modul kann auch die Temperatur anzeigen, dies soll zusätzlich genutzt werden. Im Programm ohne Animation kann der optionale Potentiometer die Helligkeit der Matrix verändern oder sie ganz ausschalten.
Uhrzeit ohne Animation mit Temperaturanzeige
Uhrzeit mit Animation
Die Hardware
- RTC-Modul
- LED-Matrix
- Potentiometer (optional)
Benötigte Bibliotheken


Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Beispiel
Im Seriellen Monitor kann ein Text eingegeben werden, der Text wird als Laufschrift auf der LED-Matrix angezeigt.
Erläuterungen
- entsprechend der ⇒SPI-Vorgabe werden die Pins festgelegt
- AnzahlMatrix bestimmt die Anzahl der verwendeten Module
- im setup-Teil wird die Matrix gestartet (begin) und die Helligkeit (setIntensity) bestimmt
anschließend werden die Parameter für die Darstellung der Laufschrift festgelegt:
setSpeed(): Geschwindigkeit des Hineinscrollens
setCharSpacing(): Abstand der Buchstaben untereinander
setTextAlignment(): Position des Textes (PA_LEFT/PA_CENTER/PA_RIGHT)
setPause(): Pause zwischen den Animationen - im loop-Teil wird die Eingabe abgefragt
die Funktion displayText() erwartet ein ⇒char-Array, der String Eingabe wird in das char-Array Ausgabe umgewandelt
displayText() erwartet sechs Parameter:
das char-Array, die Position des Textes, die Geschwindigkeit des Hineinscrollens, die Pause zwischen den Animationen, Methoden des Hineinscrollens und des Herausscrollens
Das Programm
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include "MD_Parola.h" // Hardware MAX7219 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define AnzahlMatrix 4 #define DATA_PIN 11 #define CLK_PIN 13 #define CS_PIN 10 MD_Parola Matrix = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, AnzahlMatrix); String Eingabe; void setup() { Serial.begin(9600); // Matrix starten Matrix.begin(); // Helligkeit (1 - 15) Matrix.setIntensity(4); Matrix.displayClear(); // Geschwindigkeit des Hineinscrollens Matrix.setSpeed(50); // Abstand der Zeichen Matrix.setCharSpacing(1); // Anordnung des Textes links Matrix.setTextAlignment(PA_LEFT); // Pause zwischen der Animation Matrix.setPause(1000); } void loop() { // auf serielle Eingabe warten while (Serial.available() > 0) { // solange lesen, bis return \n eingegeben wurde Eingabe = Serial.readStringUntil('\n'); Serial.println(Eingabe); } // Eingabe in char-Array Ausgabe umwandeln char Ausgabe[Eingabe.length()]; Eingabe.toCharArray(Ausgabe, Eingabe.length() + 1); // Lauftext anzeigen if (Matrix.displayAnimate()) { Matrix.displayText(Ausgabe, Matrix.getTextAlignment(), Matrix.getSpeed(), Matrix.getPause(), PA_SCROLL_LEFT, PA_SCROLL_LEFT); } } |
Zeit und Temperatur ohne Animation
Im setup-Teil wird die aktuelle Zeit ⇒festgelegt.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include "MD_Parola.h" // Hardware MAX7219 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define AnzahlMatrix 4 #define DATA_PIN 11 #define CLK_PIN 13 #define CS_PIN 10 MD_Parola Matrix = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, AnzahlMatrix); String Eingabe; void setup() { Serial.begin(9600); // Matrix starten Matrix.begin(); // Helligkeit (1 - 15) Matrix.setIntensity(4); Matrix.displayClear(); // Geschwindigkeit des Hineinscrollens Matrix.setSpeed(50); // Abstand der Zeichen Matrix.setCharSpacing(1); // Anordnung des Textes links Matrix.setTextAlignment(PA_LEFT); // Pause zwischen der Animation Matrix.setPause(1000); } void loop() { // auf serielle Eingabe warten while (Serial.available() > 0) { // solange lesen, bis return \n eingegeben wurde Eingabe = Serial.readStringUntil('\n'); Serial.println(Eingabe); } // Eingabe in char-Array Ausgabe umwandeln char Ausgabe[Eingabe.length()]; Eingabe.toCharArray(Ausgabe, Eingabe.length() + 1); // Lauftext anzeigen if (Matrix.displayAnimate()) { Matrix.displayText(Ausgabe, Matrix.getTextAlignment(), Matrix.getSpeed(), Matrix.getPause(), PA_SCROLL_LEFT, PA_SCROLL_LEFT); } } |
Zeit und Temperatur ohne Animation dimmen mit Potentiometer
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#include "MD_Parola.h" #include "RTClib.h" // Hardware MAX7219 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define AnzahlMatrix 4 #define DATA_PIN 11 #define CLK_PIN 13 #define CS_PIN 10 MD_Parola Matrix = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, AnzahlMatrix); // Name des RTC-Moduls (rtc) RTC_DS3231 rtc; // °C definieren const uint8_t GradC[] = { 6, 3, 3, 56, 68, 68, 68 }; String Zeit; // Wartezeit zwischen uhrzeit und Temperatur #define Wartezeit 5000 int Helligkeit; void setup() { // RTC-Modul starten rtc.begin(); // beim erneuten Hochladen // vor die Zeile setzen // Zeit aus dem Zeitpunkt des Kompilierens synchronisieren rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // alternativ // beim erneuten Hochladen // vor die Zeile setzen // rtc.adjust(DateTime(2026, 1, 5, 10, 0, 30)); Matrix.begin(); // ein Zeichen für GradC festlegen Matrix.addChar('#', GradC); // Helligkeit (1 - 15) Matrix.setIntensity(0); // Abstand der Zeichen Matrix.setCharSpacing(1); // Ausrichtung Matrix.setTextAlignment(PA_CENTER); Matrix.displayClear(); } void loop() { Helligkeit = map(analogRead(A0), 0, 1023, 0, 15); Matrix.setIntensity(Helligkeit); if (Helligkeit == 0) Matrix.displayShutdown(true); else Matrix.displayShutdown(false); // aktuelle Zeit holen DateTime aktuell = rtc.now(); char Zeit[] = "hh:mm"; String Temperatur = String(rtc.getTemperature(), 1); // replace -> . durch , ersetzen Temperatur.replace(".", ","); Matrix.print(aktuell.toString(Zeit)); delay(Wartezeit); Helligkeit = map(analogRead(A0), 0, 1023, 0, 15); Matrix.setIntensity(Helligkeit); if (Helligkeit == 0) Matrix.displayShutdown(true); else Matrix.displayShutdown(false); Matrix.print(Temperatur + " #"); delay(Wartezeit); } |
Zeit mit Animation
Im setup-Teil wird die aktuelle Zeit ⇒festgelegt.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#include "MD_Parola.h" #include "RTClib.h" // Hardware MAX7219 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define AnzahlMatrix 4 #define DATA_PIN 11 #define CLK_PIN 13 #define CS_PIN 10 MD_Parola Matrix = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, AnzahlMatrix); // Name des RTC-Moduls (rtc) RTC_DS3231 rtc; // String für die Zeit String Zeit; void setup() { // RTC-Modul starten rtc.begin(); // beim erneuten Hochladen // vor die Zeile setzen // Zeit aus dem Zeitpunkt des Kompilierens synchronisieren rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // alternativ // beim erneuten Hochladen // vor die Zeile setzen // Jahr, Monat, Tag, Stunden, Minuten, Sekunden // rtc.adjust(DateTime(2026, 1, 5, 10, 0, 30)); // Matrix starten Matrix.begin(); // Helligkeit (1 - 15) Matrix.setIntensity(4); Matrix.displayClear(); // Geschwindigkeit des Hineinscrollens Matrix.setSpeed(50); // Abstand der Zeichen Matrix.setCharSpacing(1); Matrix.setTextAlignment(PA_CENTER); // Pause zwischen der Animation Matrix.setPause(5000); } void loop() { // String Zeit leeren Zeit = ""; // aktuelle Zeit holen DateTime aktuell = rtc.now(); // String Zeit erstellen und in char-Array umwandeln // wenn Stunden/Minuten < 10 -> 0 davor setzen if (aktuell.hour() < 10) Zeit += "0"; Zeit += String(aktuell.hour()); Zeit += ":"; if (aktuell.minute() < 10) Zeit = Zeit + "0"; Zeit += String(aktuell.minute()); char Uhrzeit[Zeit.length()]; Zeit.toCharArray(Uhrzeit, Zeit.length() + 1); if (Matrix.displayAnimate()) { /* Aufruf displayText char-Array, Position, Geschwindigkeit der Animation, Dauer der Animation, Hineinscollen, Hinausscrollen Parameter Position: PA_LEFT/PA_CENTER/PA_RIGHT Parameter Scrollen: PA_SCROLL_UP_LEFT PA_SCROLL_DOWN_LEFT PA_SCROLL_UP_RIGHT PA_SCROLL_DOWN_RIGHT PA_SCROLL_LEFT PA_SCROLL_RIGHT PA_SCROLL_UP PA_SCROLL_DOWN */ Matrix.displayText(Uhrzeit, Matrix.getTextAlignment(), Matrix.getSpeed(), Matrix.getPause(), PA_SCROLL_UP_LEFT, PA_SCROLL_DOWN_LEFT); } } |
Quellen
Ähnliche Projekte
- Datum und Zeit mit ESP und time.h anzeigen
- Datum und Zeit mit dem NTP-Protokoll anzeigen
- DHT – Messdaten und Zeit auf TFT anzeigen
- Stoppuhr
- Uhr mit TFT 240×240 Pixeln
- Zeit mit time.h auf einem TFT anzeigen
- Wecker mit einem RTC-Modul
- Zeit im Seriellen Monitor mit ESP-Mikrocontroller anzeigen
- Datum, Uhrzeit und Temperatur auf einem LCD mit einem RTC-Modul anzeigen
- Zeit auf Waveshare E-Ink 2,9 Zoll anzeigen
Letzte Aktualisierung: