Arduino Nano Clock mit 4x64 LED Matrix (neue Version)
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Apps und Onlinedienste
|
Über dieses Projekt
Das Ablesen einer Uhranzeige in einem Raum in mehreren Metern Entfernung erfordert eine solche LED-Matrix-Anzeige.
Nachdem ich zu einem guten Preis ein 4-Zellen-Display gekauft hatte, suchte ich bei Hackster nach verfügbaren Projekten:Es gibt mehrere für Arduino Nano. Wenn Sie Stunde, Minute und Sekunde gleichzeitig sehen möchten:Nur wenige Projekte funktionieren, denn Sie benötigen kleinere Ziffern als die weit verbreiteten mit 5x7 Pixel pro Ziffer. Eine Möglichkeit besteht darin, die Bibliothek MD_Parola zu verwenden, aber die Codegröße ist für eine einfache Uhr zu groß. Die andere getestete Option war die Max72xxPanel-Bibliothek, die jedoch zu alt ist und andere Bibliotheken aufruft. Schließlich basiert das Projekt auf der Basis-Schnittstellenbibliothek MD_MAX722XX, die in allen anderen enthalten ist.
Die Anmerkungen von dieser Site veranlassten mich, die Hardwareaspekte und den Code zu überprüfen.
- Es gibt viele Bibliotheken namens DS3231. Ich benutze dieses:http://www.rinkydinkelectronics.com/library.php?id=73
Arduino/chipKit-Bibliotheksunterstützung für die DS3231 I2C Real-Time ClockCopyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. Alle Rechte vorbehalten
- Erstens:das LED-Matrix-Display. Es gibt mehrere Modelle auf dem Markt, daher ist es sehr wahrscheinlich, dass das Display nach dem Hochladen dieses Codes seltsame Dinge anzeigt. Lösung:Laden Sie dieses Beispiel aus der Bibliothek "MD_MAX72xx_lib.h" hoch:"MD_MAX72xx_HW_Mapper.ino" und suchen Sie Ihr Hardwaremodell. In meinem Code wurde das Modell definiert:#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW, aber das funktioniert möglicherweise nicht, bis Sie das richtige Modell eingestellt haben!
- Die nette kleine Sekunde ist in letzter Zeit nicht aufgetaucht? Jetzt (v2) sind die Schriftarten für diese Sekunden im Code enthalten, sodass keine anderen Bibliotheken geändert werden müssen.
- Aufgrund von Arduino-Updates ist eine lange Kompilierungs-Warnliste aufgetreten. Jetzt befinden sich die Monate in einem zweidimensionalen char-Array und verwenden keinen Zeiger mehr. Alle anderen Warnungen stammen aus der DS3231.h-Bibliothek, können aber ignoriert werden.
- Die blinkenden Punkte sind jetzt nur noch 2 Punkte! Die genauen Sekunden werden in meinen 3x5-Schriften nach "hh:mm" angezeigt. Außerdem blinken die Spaltenpunkte ":" fast zweimal pro Sekunde, nur um zu zeigen, dass es lebt!
- Beantwortung einer Anfrage:Die Uhrzeit wird jede Minute 53 Sekunden lang angezeigt und während der letzten 7 Sekunden werden das Datum und die Temperatur angezeigt.
- Der Wochentag kann auch angezeigt werden, wenn Sie in der Schleife() zwei Zeilen auskommentieren. In diesem Fall ziehen Sie es vielleicht vor, das Intervall von 53 Sekunden auf 51 zu reduzieren.
- Wenn Sie das 12-Stunden-Format bevorzugen, lesen Sie eine meiner älteren Antworten.
- Die RTC-Zeit kann im Arduino Serial Monitor eingestellt werden, indem man in den Eingabebereich DD/MM/YYYY hh:mm:ss (Leerzeichen dazwischen nicht vergessen) schreibt und Enter/Send drückt. Dies ist immer dann möglich, wenn ein USB-Kabel angeschlossen ist und Serial Monitor funktioniert (korrekte COM- und Baudrate).
Der neue Code verwendet 13558 Byte (44%) und 372 Byte (18%) für Variablen, ist also etwas kürzer!
Das Datum wird als "dd Mon" und die Raumtemperatur in Grad angezeigt. Celsius (geschätzt mit dem internen RTC-Sensor) wird auf einer separaten Seite angezeigt. Die Helligkeit wird durch einen Fotowiderstand gesteuert. Der Code funktioniert jedoch auch ohne Lichtsensor.
Vielen Dank für Ihr Interesse, sichtbar durch den "Respekt"-Button!
Code
- ALTE Version - Arduino Nano Dot Matrix Uhr
- Neue Version (v2) - Arduino Nano Dot Matrix Uhr
ALTE Version - Arduino Nano Dot Matrix UhrArduino
Da sich seit der ersten Veröffentlichung viele Bibliotheken geändert haben, ist dieser Code veraltet. Verwenden Sie die neue VersionAlle Verbindungen sind im Code beschrieben. Für kleine Schriftarten ändern Sie einige Zeilen in MD_MAX72xx_font.cpp, wie im Code erklärt./* WARNUNG:Der ursprüngliche Code ist jetzt veraltet. Verwenden Sie die neue (Version 2) * Arduino Nano DS3231 Clock mit LED Matrix 4x(8x8) SPI * * Arduino Nano 5V Logik - 32kB prog. Leerzeichen * Werkzeuge:Board:Arduino Nano; Prozessor:ATmega328P (Old Bootloader)!!* LED Matrix 4x(8x8) SPI mit Anschluss auf der rechten Seite (letztes Modul)* https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in- 1-Display-For-Arduino-p-1072083.html?rmmds=myorder&cur_warehouse=CN* * ANSCHLÜSSE:*>> LCD 4x64 -> Arduino Nano:(mit Hardware SPI):* 5V -> 5V Pin* GND -> GND pin* CLK_PIN -> 13 // oder SCK* DATA_PIN -> 11 // oder MOSI* CS_PIN -> 10 // oder SS * *>> DS3231 RTC -> Arduino Nano:* SDA (DAT) -> A4* SCL ( CLK) -> A5 * Inspiriert von :1) Arduino Clock von AnthoTRONICS Letzte Änderung:22.03.2019* aber ohne MD_parola wegen der großen Stellfläche! Neue getdate-Funktion.* 2) Einfachste UNO-Digitaluhr aller Zeiten von plouc68000:* https://create.arduino.cc/projecthub/plouc68000/simplest-uno-digital-clock-ever-4613aa?ref=user&ref_id=680368&offset=1* 3) LEDDotMatrixClock.ino von Leonardo Sposina, aber hier ohne "Max72xxPanel.h"* https://github.com/leonardosposina/arduino-led-dot-matrix-clock/blob/master/LEDDotMatrixClock/LEDDotMatrixClock.ino* Nicht verwenden Max72xxPanel.h, aber kleine Ziffern werden weiterhin verwendet. Kleiner Footprint-Code hier.* Ersetzen in Bibliothek MD_MAX72XX/src/MD_MAX72xx_font.cpp :* 1) #define USE_NEW_FONT 1* 2) Schriftarten #148 ... 158 müssen durch 3x5 Schriftarten ersetzt werden:3, 248, 136, 248, / / 48 0 3, 144, 248, 128, // 49 1 3, 200, 168, 184, // 50 2 3, 136, 168, 248, // 51 3 3, 112, 72, 224, // 52 4 3, 184, 168, 232, // 53 5 3, 248, 168, 232, // 54 6 3, 8, 232, 24, // 55 7 3, 248, 168, 248, // 56 8 3 , 184, 168, 248, // 57 9 1, 80, // 58 :* * Projekt:13790 Byte (44%); Variablen 361 Byte (17%)* Autor:MVP https://www.hackster.io/MVP*/#include#include "DS3231.h"#include "MD_MAX72xx_lib.h"//#include " Font_Data.h"DS3231 rtc(SDA, SCL); // Echtzeituhrconst-Byte LDR_PIN =A2; // LDR Sensor Pin#define MAX_DEVICES 4// Definiere Pins#define CLK_PIN 13 // oder SCK#define DATA_PIN 11 // oder MOSI#define CS_PIN 10 // oder SS#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW#define USE_NEW_FONT 1#define BUF_SIZE 20 // Textpuffergröße#define CHAR_SPACING 1 // Pixel zwischen Zeichenchar buf[BUF_SIZE], secs[4];uint8_t dots;// SPI Hardware Interface // Max72xxPanel Matrix =Max72xxPanel(CS_PIN, H_DISPLAYS, V_DISPLAYS);MD_MAX72XX Matrix =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);const byte WAIT =100;const byte SPACER =1;byte FONT_WIDTH;bool timeset=false;void adjustClock(String data) { byte _day =data.substring(0,2).toInt (); Byte_Monat =data.substring(3,5).toInt(); int _year =data.substring(6,10).toInt(); Byte_hour =data.substring(11,13).toInt(); Byte_min =data.substring(14,16).toInt(); Byte_sec =data.substring(17,19).toInt(); rtc.setTime(_hour, _min, _sec); rtc.setDate(_day, _month, _year); Serial.println (F(">> Datetime erfolgreich eingestellt!")); timeset=true;} byte ledintensitySelect (int light) { byte _value =0; if (Licht>=0 &&Licht <=127) {_Wert =12; aufrechtzuerhalten. Sonst wenn (Licht>=128 &&Licht <=319) {_Wert =3; aufrechtzuerhalten. Sonst wenn (Licht>=320 &&Licht <=512) {_Wert =0; } return _value;};void printText(uint8_t modStart, uint8_t modEnd, char *pMsg)// Gibt den Textstring an die angegebenen LED-Matrix-Module aus.// Nachrichtenbereich wird nach dem Drucken mit leeren Spalten aufgefüllt.{ uint8_t state =0; uint8_t curLen; uint16_t showLen; uint8_t cBuf[FONT_WIDTH]; int16_t col =((modEnd + 1) * COL_SIZE) - 1; matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::OFF); do // endliche Zustandsmaschine, um die Zeichen im verfügbaren Platz zu drucken { switch(state) { case 0:// Das nächste Zeichen aus der Fonttabelle laden // wenn wir das Ende der Nachricht erreicht haben, den Nachrichtenzeiger zurücksetzen if (*pMsg =='\0') { showLen =col - (modEnd * COL_SIZE); // Zeichen auffüllen state =2; brechen; } // das nächste Zeichen aus der Fontdatei abrufen showLen =matrix.getChar(*pMsg++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf); curLen =0; Zustand++; // !! absichtlich in den nächsten Zustand wechseln, um mit der Anzeige von Fall 1 zu beginnen:// den nächsten Teil des Zeichens anzeigen matrix.setColumn(col--, cBuf[curLen++]); // fertig mit Schriftzeichen, jetzt den Abstand zwischen den Zeichen anzeigen if (curLen ==showLen) { showLen =CHAR_SPACING; Zustand =2; } brechen; Fall 2:// Zustand für die Anzeige leerer Spalten initialisieren curLen =0; Zustand++; // Fall durch Fall 3:// Zwischenzeichenabstand oder Ende des Nachrichtenauffüllens anzeigen (leere Spalten) matrix.setColumn(col--, 0); curLen++; if (curLen ==showLen) Zustand =0; brechen; Vorgabe:Spalte =-1; // dies beendet definitiv die do-Schleife } } while (col>=(modStart * COL_SIZE)); matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::ON);}void setup() { pinMode(LDR_PIN, INPUT_PULLUP); Serial.begin (9600); Serial.println (F(">> Arduino 32x8 LED Dot Matrix Clock!")); Serial.println (F(">> Verwenden Sie das Format , um Datum und Stunde der Uhr einzustellen!")); rtc.begin(); matrix.begin(); Matrix.clear(); FONT_WIDTH=5 + SPACER; // Die Schriftbreite beträgt 5 Pixel matrix.control(MD_MAX72XX::INTENSITY, 2);; // Verwenden Sie einen Wert zwischen 0 und 15 für die Helligkeit}void getDate()// Date Setup:Code zum Lesen des Uhrzeitdatums{ char*months[]={"Jan","Feb","Mar","Apr", „Mai“, „Jun“, „Jul“, „Aug“, „Sep“, „Okt“, „Nov“, „Dez“}; String dts =rtc.getDateStr(); // dd/mm/yyyy string abrufen String dds=dts.substring(0,2); // Datum extrahieren String mms=dts.substring(3,5); // Monat extrahieren int mm=mms.toInt(); // Konvertieren in die Monatsnummer dds.concat(" "); dds.concat(String(Monate[mm-1])); // Datumszeichenfolge als "dd Mmm" neu erstellen dds.toCharArray(buf,sizeof(buf)); // Rückgabepuffer}void getHour()// Date Setup:Code zum Lesen des Uhrzeitdatums{ String dts =rtc.getTimeStr(); // Hole hh:mm:ss string String hhs=dts.substring(0,2); // Stunde extrahieren int hh=hhs.toInt(); // In Zahl umwandeln if (hh <10) dots=7; if(hh> 19 &&hh <24) Punkte=13; if ((hh> 9 &&hh <20) || (hh ==21)) Punkte=11; if (hh ==1) Punkte =5; if (hh ==11) Punkte =10; //String outmsg=dts.substring(0,5); // hh:mm extrahieren (optional) String outmsg=String(hh); // h extrahieren, wenn h<10 outmsg.concat(":"); // hinzufügen:outmsg.concat(dts.substring(3,5)); // mm hinzufügen outmsg.toCharArray(buf,BUF_SIZE);}void showsec(){ String dts =rtc.getTimeStr(); // Hole hh:mm:ss string String scs1=dts.substring(6,7); Zeichenfolge scs2=dts.substring(7); char sc1=148+scs1.toInt(); // Konvertieren in den Index von char char sc2=148+scs2.toInt(); // Konvertieren in den Index von char matrix.setChar(6,sc1); matrix.setChar(2,sc2);}void loop() { byte ledIntensity =ledintensitySelect (analogRead (LDR_PIN)); matrix.control(MD_MAX72XX::INTENSITY, ledIntensity);; // Verwenden Sie einen Wert zwischen 0 und 15 für die Helligkeit // Zeige hh:mm von buf getHour(); printText(0,MAX_DEVICES-1,buf); Verzögerung (WARTEN); // Zwei Punkte blinken:for (uint8_t i=0; i<8; i++){ matrix.setColumn(MAX_DEVICES*8-dots,36); showsec(); Verzögerung (250); matrix.setColumn(MAX_DEVICES*8-Punkte,0); showsec(); Verzögerung (250); } // Beenden durch Scrollen nach oben:for (uint8_t i=0; i<8; i++){ matrix.transform(MD_MAX72XX::TSU); Verzögerung (2*WAIT); Verzögerung (WARTEN); } Verabredung bekommen(); printText(0,MAX_DEVICES-1,buf); Verzögerung (20*WAIT); int temp =rtc.getTemp(); temp=temp-1; // Offset -1 C String outmsg=String(temp); outmsg.concat("C"); outmsg.toCharArray(buf,BUF_SIZE); printText(0,MAX_DEVICES-1,buf); Verzögerung (20*WAIT); // Zeiteinstellung in RTC:if (Serial.available()> 0 &×et==false) { adjustClock(Serial.readString()); }}
Neue Version (v2) - Arduino Nano Dot Matrix UhrArduino
Aktualisiert in Übereinstimmung mit neuen Bibliotheken./* Arduino Nano DS3231 Clock mit LED Matrix 4x(8x8) SPI * Version 2 - aktualisiert 15.05.02-21 * Arduino Nano 5V Logik - 32kB prog. Leerzeichen * Werkzeuge:Board:Arduino Nano; Prozessor:ATmega328P (Old Bootloader)!!* LED Matrix 4x(8x8) SPI mit Anschluss auf der rechten Seite (letztes Modul)* https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in- 1-Display-For-Arduino-p-1072083.html?rmmds=myorder&cur_warehouse=CN* * ANSCHLÜSSE:*>> LCD 4x64 -> Arduino Nano:(mit Hardware SPI):* 5V -> 5V Pin* GND -> GND pin* CLK_PIN -> 13 // oder SCK* DATA_PIN -> 11 // oder MOSI* CS_PIN -> 10 // oder SS * *>> DS3231 RTC -> Arduino Nano:* SDA (DAT) -> A4* SCL ( CLK) -> A5 * Inspiriert von :1) Arduino Clock von AnthoTRONICS Letzte Änderung:22.03.2019* aber ohne MD_parola wegen der großen Stellfläche! Neue getdate-Funktion.* 2) Einfachste UNO-Digitaluhr aller Zeiten von plouc68000:* https://create.arduino.cc/projecthub/plouc68000/simplest-uno-digital-clock-ever-4613aa?ref=user&ref_id=680368&offset=1* 3) LEDDotMatrixClock.ino von Leonardo Sposina, aber hier ohne "Max72xxPanel.h"* https://github.com/leonardosposina/arduino-led-dot-matrix-clock/blob/master/LEDDotMatrixClock/LEDDotMatrixClock.ino* Nicht verwenden Max72xxPanel.h, aber kleine Ziffern werden weiterhin verwendet. Code mit geringem Platzbedarf hier.* * Projekt:113558 Byte (44%); Variablen 372 Byte (17%)* Autor:MVP https://www.hackster.io/MVP*/#include#include "DS3231.h"#include "MD_MAX72xx_lib.h"//#include " Font_Data.h"DS3231 rtc(SDA, SCL); // Echtzeituhrconst-Byte LDR_PIN =A2; // LDR Sensor Pin#define MAX_DEVICES 4// Definiere Pins#define CLK_PIN 13 // oder SCK#define DATA_PIN 11 // oder MOSI#define CS_PIN 10 // oder SS// Definiere unten dein LED Matrix Hardwaremodell://# define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW#define HARDWARE_TYPE MD_MAX72XX::FC16_HW#define USE_NEW_FONT 1#define BUF_SIZE 20 // Textpuffergröße#define CHAR_SPACING 1 // Pixel zwischen den Zeichenchar buf[BUF_SIZE], secs[4];huint8 mm, secs[4];uint8 ss, dots;// Definition der kleinen Schriften:uint8_t Font3x5 [ 10 ][ 3 ]={ { 248, 136, 248}, // 48 0 {144, 248, 128}, // 49 1 {200, 168 , 184}, // 50 2 {136, 168, 248}, // 51 3 {112, 72, 224}, // 52 4 {184, 168, 232}, // 53 5 {248, 168, 232 }, // 54 6 {8, 232, 24}, // 55 7 {248, 168, 248}, // 56 8 {184, 168, 248}}; // 57 9char Monate[12][4]={"Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep"," Oct","Nov","Dec"};char* wday;// SPI-Hardwareschnittstelle// Max72xxPanel matrix =Max72xxPanel(CS_PIN, H_DISPLAYS, V_DISPLAYS);MD_MAX72XX matrix =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);const byte WAIT =100;const byte SPACER =1;Byte FONT_WIDTH;bool timeset=false;void adjustClock(String data) { byte _day =data.substring(0,2).toInt(); Byte_Monat =data.substring(3,5).toInt(); int _year =data.substring(6,10).toInt(); Byte_hour =data.substring(11,13).toInt(); Byte_min =data.substring(14,16).toInt(); Byte_sec =data.substring(17,19).toInt(); rtc.setTime(_hour, _min, _sec); rtc.setDate(_day, _month, _year); Serial.println (F(">> Datetime erfolgreich eingestellt!")); timeset=true;} byte ledintensitySelect (int light) { byte _value =0; if (Licht>=0 &&Licht <=127) {_Wert =12; aufrechtzuerhalten. Sonst wenn (Licht>=128 &&Licht <=319) {_Wert =3; aufrechtzuerhalten. Sonst wenn (Licht>=320 &&Licht <=512) {_Wert =0; } return _value;};void printText(uint8_t modStart, uint8_t modEnd, char *pMsg)// Gibt den Textstring an die angegebenen LED-Matrix-Module aus.// Nachrichtenbereich wird nach dem Drucken mit leeren Spalten aufgefüllt.{ uint8_t state =0; uint8_t curLen; uint16_t showLen; uint8_t cBuf[FONT_WIDTH]; int16_t col =((modEnd + 1) * COL_SIZE) - 1; matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::OFF); do // endliche Zustandsmaschine, um die Zeichen im verfügbaren Platz zu drucken { switch(state) { case 0:// Das nächste Zeichen aus der Fonttabelle laden // wenn wir das Ende der Nachricht erreicht haben, den Nachrichtenzeiger zurücksetzen if (*pMsg =='\0') { showLen =col - (modEnd * COL_SIZE); // Zeichen auffüllen state =2; brechen; } // das nächste Zeichen aus der Fontdatei abrufen showLen =matrix.getChar(*pMsg++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf); curLen =0; Zustand++; // !! absichtlich in den nächsten Zustand wechseln, um mit der Anzeige von Fall 1 zu beginnen:// den nächsten Teil des Zeichens anzeigen matrix.setColumn(col--, cBuf[curLen++]); // fertig mit Schriftzeichen, jetzt den Abstand zwischen den Zeichen anzeigen if (curLen ==showLen) { showLen =CHAR_SPACING; Zustand =2; } brechen; Fall 2:// Zustand für die Anzeige leerer Spalten initialisieren curLen =0; Zustand++; // Fall durch Fall 3:// Zwischenzeichenabstand oder Ende des Nachrichtenauffüllens anzeigen (leere Spalten) matrix.setColumn(col--, 0); curLen++; if (curLen ==showLen) Zustand =0; brechen; Vorgabe:Spalte =-1; // dies beendet definitiv die do-Schleife } } while (col>=(modStart * COL_SIZE)); matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::ON);}void setup() { pinMode(LDR_PIN, INPUT_PULLUP); Serial.begin (9600); Serial.println (F(">> Arduino 32x8 LED Dot Matrix Clock!")); Serial.println (F(">> Verwenden Sie das Format , um Datum und Stunde der Uhr einzustellen!")); rtc.begin(); matrix.begin(); Matrix.clear(); FONT_WIDTH=5 + SPACER; // Die Schriftbreite beträgt 5 Pixel matrix.control(MD_MAX72XX::INTENSITY, 2);; // Verwenden Sie einen Wert zwischen 0 und 15 für die Helligkeit rtc.setDOW(); // Erforderlich für eine neue RTC}void getDate()// Date Setup:Code zum Lesen des Uhrzeitdatums{ String dts =rtc.getDateStr(); // dd/mm/yyyy string abrufen String dds=dts.substring(0,2); // Datum extrahieren String mms=dts.substring(3,5); // Monat extrahieren int mm=mms.toInt(); // Konvertieren in die Monatsnummer dds.concat(" "); dds.concat(String(Monate[mm-1])); // Datumszeichenfolge als "dd Mmm" neu erstellen dds.toCharArray(buf,sizeof(buf)); // Rückgabepuffer wday =rtc.getDOWStr(2);}void getHour()// Date Setup:Code zum Lesen des Uhrzeitdatums{ String dts =rtc.getTimeStr(); // Hole hh:mm:ss string String hhs=dts.substring(0,2); // Stunde extrahieren String mms=dts.substring(3,5); // Minuten extrahieren hh=hhs.toInt(); // In Zahl umwandeln mm=mms.toInt(); // Konvertieren in Zahl mm ss=(dts.substring(6,8)).toInt(); // Sekunden als Zahl extrahieren if (hh>=0 &&hh <10) dots=7; if (hh> 9 &&hh <20) Punkte=11; if (hh> 19 &&hh <25) Punkte=13; if (hh%10 ==1) Punkte-=2; //String outmsg=dts.substring(0,5); // hh:mm extrahieren (optional) String outmsg=String(hh); // h extrahieren, wenn h<10 // outmsg.concat(":"); // add :aber auf 2 Spalten!! outmsg.concat(char(124)); // 1 volle Spalte zwischen Zahlen hinzufügen outmsg.concat(dts.substring(3,5)); // mm hinzufügen outmsg.toCharArray(buf,BUF_SIZE);}// Neue Version der Funktion, die die kleinen eingebetteten Schriftarten verwendetvoid showsec(uint8_t secs){ uint8_t secs1=secs%10; uint8_t secs2=secs/10; für (uint8_t k=0; k<3; k++){matrix.setColumn(MAX_DEVICES*8-26-k,Font3x5 [secs2][k]); matrix.setColumn(MAX_DEVICES*8-30-k,Font3x5 [secs1][k]); }}void loop () { byte ledIntensity =ledintensitySelect (analogRead (LDR_PIN)); matrix.control(MD_MAX72XX::INTENSITY, ledIntensity);; // Verwenden Sie einen Wert zwischen 0 und 15 für die Helligkeit getHour(); // Lesezeit von RTC printText(0,MAX_DEVICES-1,buf); // Zeige hh|mm von buf matrix.setColumn(MAX_DEVICES*8-dots,0); // Löschen Sie das | unsigned long inst =millis(); // diesen Moment markieren while (ss <53){ // Die ersten 53 Sekunden jeder Minute zeigen die Zeit while (millis() - inst> 1000){ inst =millis(); ss++; // Sekunden erhöhen showsec(ss); // Sekunden anzeigen für (uint8_t i =0; i <2; i++){ matrix.setColumn(MAX_DEVICES*8-dots,36); // Zwei Punkte blinken:delay (240); matrix.setColumn(MAX_DEVICES*8-Punkte,0); Verzögerung (240); } } } // Dann scrollt "time" nach oben:for (uint8_t i=0; i<8; i++){ matrix.transform(MD_MAX72XX::TSU); Verzögerung (3*WAIT); } // Schreibe das aktuelle Datum:getDate(); printText(0,MAX_DEVICES-1,buf); Verzögerung (20*WAIT); // Schreibe den Wochentag (falls unkommentiert)://printText(0,MAX_DEVICES-1,wday); // Verzögerung (20 * WARTEN); // Schreiben Sie die geschätzte Raumtemperatur vom RTC-Sensor int temp =rtc.getTemp (); temp=temp-1; // Offset -1 C String outmsg=String(temp); outmsg.concat("C"); outmsg.toCharArray(buf,BUF_SIZE); printText(0,MAX_DEVICES-1,buf); Verzögerung (20*WAIT); // Zeiteinstellung in RTC, wenn der serielle Monitor in der Arduino IDE aktiviert ist:if (Serial.available ()> 0 &×et ==false) { adjustClock (Serial.readString ()); }}
Schaltpläne
Inspiriert von Leonardo Sposina, aber #define CS_PIN(Matrix)<--> 10(Nano)
Der Schaltplan ist für alle Matrix-Projekte FAST gleich. Hier ist der Fotowiderstand original. Wie im Code erwähnt:#define CS_PIN(Matrix)<--> 10(Nano) https://github.com/leonardosposina/arduino-led-dot-matrix-clockHerstellungsprozess
- Arduino-Uhr mit islamischen Gebetszeiten
- Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
- Arduino mit Bluetooth zur Steuerung einer LED!
- Mit Nextion Display spielen
- LED-Matrix + Bewegungssensor-Türanzeige [Arduino Holiday]
- Arduino Nano:Steuerung von 2 Schrittmotoren mit Joystick
- Einzelne LED-Matrix-Arduino Flip Clock
- Steuerung einer LED-Matrix mit Arduino Uno
- Handheld-Geigerzähler mit Arduino Nano
- Smart Battery Charger Multiplexer mit Smart Display