@@ -12,14 +12,14 @@ https://www.mylms.cz/text-arduino-hodiny-s-maticovym-displejem/
1212https://github.com/mylms/Arduino-Matrix-Clock
1313
1414D2 - BTN 1 (set internal_pullup)
15- D3 � BTN 2 (set internal_pullup)
16- D4 � matrix display, pin DIN
17- D5 � matrix display, pin CLK
18- D6 � matrix display, pin CS
19- A4 � RTC module, pin SDA
20- A5 � RTC module, pin SCL
21- GND � common for all modules
22- 5V � common for all modules, 5V supply connected via 1N4148
15+ D3 – BTN 2 (set internal_pullup)
16+ D4 – matrix display, pin DIN
17+ D5 – matrix display, pin CLK
18+ D6 – matrix display, pin CS
19+ A4 – RTC module, pin SDA
20+ A5 – RTC module, pin SCL
21+ GND – common for all modules
22+ 5V – common for all modules, 5V supply connected via 1N4148
2323
2424
2525NOTE I: Daylight saving currently is not used (maybe in future).
@@ -40,7 +40,7 @@ Strt = start (second are set to 0 after press the button)
4040
4141SERIAL COMMUNICATION (9600b)
4242You have to send three chars. 1st is function, other two are digits
43- XDD -> X = function; DD = number 00 to 99 (two digits are nessesary)
43+ XNN -> X = function; NN = number 00 to 99 (two digits are nessesary)
4444Command is case sensitive!! M01 and m01 are different commands.
4545
4646y = year (0 - 99)
@@ -52,6 +52,7 @@ H = hour (0 - 23)
5252M = minute (0 - 59)
5353S = second (0 - 59)
5454
55+ D - show date (how many second per minute is shown date 00 = no, 60 = always)
5556T = turn font 1
5657t = turn font 2
5758b = brightness (0 - 15)
@@ -108,7 +109,7 @@ const uint64_t symbols[] = {
108109 0x0063954525956300 , // daylight saving
109110 0x1f303e3333330000 , // y
110111 0x00636b7f7f330000 , // m
111- 0x0002020600000600 , // reserve
112+ 0x001f36666666361f , // D
112113 0x0002020600000e00 , // reserve
113114 0x003e676f7b73633e , // font 1 - 0
114115 0x007e181818181c18 ,
@@ -173,10 +174,12 @@ byte daylightSaving = 0; //daylight saving is enable from 31.3. to 27.10.
173174byte timeMode1224 = 1 ; // 12/24 hour mode 12 = 0, 24 = 1
174175byte turnFont1 = 0 ; // font turning verticaly (one char)
175176byte turnFont2 = 0 ; // font turning verticaly (all display)
177+ byte showDate = 0 ; // how many secon in one minute cycle is shown date
176178
177179bool showDots; // dots are shown
178180bool pmDotEnable = false ; // pm dot is shown
179181bool dayightTimeEnable = false ; // is daylight time
182+ bool showDateNow = false ; // now date is shown instead of time
180183
181184void setup () {
182185 // COMMUNICATION
@@ -230,6 +233,12 @@ void setup() {
230233 timeMode1224 = 1 ;
231234 }
232235
236+ showDate = EEPROM.read (7 ); // load date time
237+ if (showDate < 0 || showDate > 60 ) {
238+ // in case variable out of range
239+ showDate = 0 ;
240+ }
241+
233242 delay (10 ); // just delay...I thing I have had add it for correct function of display
234243
235244 // SET ALL DISPLAYS
@@ -494,10 +503,10 @@ void loop() {
494503
495504 // NEXT
496505 systemState++;
497- DrawSymbol (3 , 3 ); // F
506+ DrawSymbol (3 , 18 ); // date
498507 DrawSymbol (2 , 0 ); // space
499- DrawSymbol (1 , (font / 10 ) + (font * 10 ) + fontOffset - 10 ); // actual font
500- DrawSymbol (0 , (font % 10 ) + (font * 10 ) + fontOffset - 10 ); // actual font
508+ DrawSymbol (1 , (showDate / 10 ) + fontOffset); // actual show date time
509+ DrawSymbol (0 , (showDate % 10 ) + fontOffset); // actual show date time
501510 }
502511 }
503512
@@ -523,6 +532,43 @@ void loop() {
523532
524533 case 8 :
525534 // menu 8
535+ // show show DATE
536+ if (presentInput1 != lastInput1) {
537+ // change detected BTN1
538+ if (presentInput1) {
539+ // rising edge detected
540+
541+ // NEXT
542+ systemState++;
543+ DrawSymbol (3 , 3 ); // F
544+ DrawSymbol (2 , 0 ); // space
545+ DrawSymbol (1 , (font / 10 ) + (font * 10 ) + fontOffset - 10 ); // actual font
546+ DrawSymbol (0 , (font % 10 ) + (font * 10 ) + fontOffset - 10 ); // actual font
547+ }
548+ }
549+
550+ if (presentInput2 != lastInput2) {
551+ // change detected BTN2
552+ if (presentInput2) {
553+ // rising edge detected
554+ // set show date
555+ showDate++;
556+ if (showDate > 60 ) {
557+ showDate = 0 ;
558+ }
559+
560+ DrawSymbol (3 , 18 ); // date
561+ DrawSymbol (2 , 0 ); // space
562+ DrawSymbol (1 , (showDate / 10 ) + fontOffset); // actual show date time
563+ DrawSymbol (0 , (showDate % 10 ) + fontOffset); // actual show date time
564+
565+ delay (25 );
566+ }
567+ }
568+ break ;
569+
570+ case 9 :
571+ // menu 9
526572 // set FONT
527573 if (presentInput1 != lastInput1) {
528574 // change detected BTN1
@@ -558,8 +604,8 @@ void loop() {
558604 }
559605 break ;
560606
561- case 9 :
562- // menu 9
607+ case 10 :
608+ // menu 10
563609 // set DOT STYLE
564610 if (presentInput1 != lastInput1) {
565611 // change detected BTN1
@@ -595,8 +641,8 @@ void loop() {
595641 }
596642 break ;
597643
598- case 10 :
599- // menu 10
644+ case 11 :
645+ // menu 11
600646 // set BRIGHTNES
601647 if (presentInput1 != lastInput1) {
602648 // change detected BTN1
@@ -636,8 +682,8 @@ void loop() {
636682 }
637683 break ;
638684
639- case 11 :
640- // menu 11
685+ case 12 :
686+ // menu 12
641687 // set TURN FONT 1
642688 // Rotate each symbol separately (vertical)
643689 if (presentInput1 != lastInput1) {
@@ -674,8 +720,8 @@ void loop() {
674720 }
675721 break ;
676722
677- case 12 :
678- // menu 12
723+ case 13 :
724+ // menu 13
679725 // set TURN FONT 2
680726 // Rotate all display (verticaly)
681727 if (presentInput1 != lastInput1) {
@@ -712,8 +758,8 @@ void loop() {
712758 }
713759 break ;
714760
715- case 13 :
716- // menu 13
761+ case 14 :
762+ // menu 14
717763 // EXIT
718764 if (presentInput1 != lastInput1) {
719765 // change detected BTN1
@@ -730,6 +776,7 @@ void loop() {
730776 EEPROM.write (4 , turnFont1); // store turn font1 to addr 4
731777 EEPROM.write (5 , turnFont2); // store turn font2 to addr 5
732778 EEPROM.write (6 , timeMode1224); // store 12/24 mode to addr 6
779+ EEPROM.write (7 , showDate); // store date time to eeprom
733780
734781 systemState = 0 ; // show actual time
735782 }
@@ -751,6 +798,15 @@ void WriteTime() {
751798 font = 1 ;
752799 }
753800
801+ if (showDate > (60 - second)) {
802+ // show date
803+ showDateNow = true ;
804+ }
805+ else {
806+ // show time
807+ showDateNow = false ;
808+ }
809+
754810 // write time to matrix display
755811 if (systemState == 2 ) {
756812 // show hours in 24h format in menu (set hours)
@@ -783,17 +839,28 @@ void WriteTime() {
783839 pmDotEnable = false ;
784840 }
785841
786- DrawSymbol (2 , (hour % 10 ) + (font * 10 ) + fontOffset - 10 );
787- DrawSymbol (3 , (hour / 10 ) + (font * 10 ) + fontOffset - 10 );
842+ if (showDateNow) {
843+ // day
844+ DrawSymbol (2 , (dayOfMonth % 10 ) + (font * 10 ) + fontOffset - 10 );
845+ DrawSymbol (3 , (dayOfMonth / 10 ) + (font * 10 ) + fontOffset - 10 );
846+
847+ // month
848+ DrawSymbol (0 , (month % 10 ) + (font * 10 ) + fontOffset - 10 );
849+ DrawSymbol (1 , (month / 10 ) + (font * 10 ) + fontOffset - 10 );
850+ }
851+ else {
852+ DrawSymbol (2 , (hour % 10 ) + (font * 10 ) + fontOffset - 10 );
853+ DrawSymbol (3 , (hour / 10 ) + (font * 10 ) + fontOffset - 10 );
854+ }
788855 }
789856
790- if (systemState == 0 || systemState == 3 ) {
857+ if (( systemState == 0 && !showDateNow) || systemState == 3 ) {
791858 // show minutes in normal state and "set minutes" state
792859 DrawSymbol (0 , (minute % 10 ) + (font * 10 ) + fontOffset - 10 );
793860 DrawSymbol (1 , (minute / 10 ) + (font * 10 ) + fontOffset - 10 );
794861 }
795862
796- if (systemState == 0 ) {
863+ if (systemState == 0 && !showDateNow ) {
797864 // TIME
798865 switch (dotStyle) {
799866 case 0 :
@@ -853,6 +920,11 @@ void DrawSymbol(byte adr, byte symbol) {
853920 if (i == 5 ) lc.setLed (2 , 5 , 7 , showDots);
854921 if (i == 6 ) lc.setLed (2 , 6 , 7 , showDots);
855922 }
923+
924+ if (adr == 2 && systemState == 0 && showDateNow) {
925+ if (i == 5 ) lc.setLed (2 , 5 , 7 , true );
926+ if (i == 6 ) lc.setLed (2 , 6 , 7 , true );
927+ }
856928
857929 if (adr == 0 ) {
858930 lc.setLed (0 , 7 , 7 , pmDotEnable);
@@ -955,7 +1027,7 @@ void SerialComm() {
9551027 receivedData = 1 ;
9561028 }
9571029 timeMode1224 = receivedData;
958- lc.setLed (2 , 7 , 6 , true ); // show setting dot
1030+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
9591031 EEPROM.write (6 , timeMode1224); // store 12/24 mode to addr 6
9601032 break ;
9611033 case 58 :
@@ -964,17 +1036,26 @@ void SerialComm() {
9641036 receivedData = 2 ;
9651037 }
9661038 dotStyle = receivedData;
967- lc.setLed (2 , 7 , 3 , true ); // show setting dot
1039+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
9681040 EEPROM.write (2 , dotStyle); // store actual font to addr 2
9691041 break ;
1042+ case 68 :
1043+ // show date 68 = D
1044+ if (receivedData > 60 ) {
1045+ receivedData = 0 ;
1046+ }
1047+ showDate = receivedData;
1048+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
1049+ EEPROM.write (7 , showDate); // store actual font to addr 2
1050+ break ;
9701051 case 72 :
9711052 // hour 72 = H
9721053 if (receivedData > 23 ) {
9731054 receivedData = 23 ;
9741055 }
9751056 hour = receivedData;
9761057 SetRtc (second, minute, hour, dayOfWeek, dayOfMonth, month, year);
977- lc.setLed (3 , 7 , 3 , true ); // show setting dot
1058+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
9781059 break ;
9791060 case 77 :
9801061 // minute 77 = M
@@ -983,7 +1064,7 @@ void SerialComm() {
9831064 }
9841065 minute = receivedData;
9851066 SetRtc (second, minute, hour, dayOfWeek, dayOfMonth, month, year);
986- lc.setLed (3 , 7 , 4 , true ); // show setting dot
1067+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
9871068 break ;
9881069 case 83 :
9891070 // second 83 = S
@@ -992,15 +1073,15 @@ void SerialComm() {
9921073 }
9931074 second = receivedData;
9941075 SetRtc (second, minute, hour, dayOfWeek, dayOfMonth, month, year);
995- lc.setLed (2 , 7 , 0 , true ); // show setting dot
1076+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
9961077 break ;
9971078 case 84 :
9981079 // turn 1 84 = T
9991080 if (receivedData > 1 ) {
10001081 receivedData = 0 ;
10011082 }
10021083 turnFont1 = receivedData;
1003- lc.setLed (2 , 7 , 4 , true ); // show setting dot
1084+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10041085 EEPROM.write (4 , turnFont1); // store turn font1 to addr 4
10051086 break ;
10061087 case 98 :
@@ -1014,7 +1095,7 @@ void SerialComm() {
10141095 lc.setIntensity (address, bright); // set light intensity 0 - min, 15 - max
10151096 }
10161097
1017- lc.setLed (2 , 7 , 1 , true ); // show setting dot
1098+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10181099 EEPROM.write (0 , bright); // store actual light intensity to addr 0
10191100 break ;
10201101 case 100 :
@@ -1024,7 +1105,7 @@ void SerialComm() {
10241105 }
10251106 dayOfMonth = receivedData;
10261107 SetRtc (second, minute, hour, dayOfWeek, dayOfMonth, month, year);
1027- lc.setLed (3 , 7 , 2 , true ); // show setting dot
1108+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10281109 break ;
10291110 case 102 :
10301111 // font 102 = f
@@ -1036,7 +1117,7 @@ void SerialComm() {
10361117 receivedData = 1 ;
10371118 }
10381119 font = receivedData;
1039- lc.setLed (2 , 7 , 2 , true ); // show setting dot
1120+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10401121 EEPROM.write (1 , font); // store actual font to addr 1
10411122 break ;
10421123 case 109 :
@@ -1046,15 +1127,15 @@ void SerialComm() {
10461127 }
10471128 month = receivedData;
10481129 SetRtc (second, minute, hour, dayOfWeek, dayOfMonth, month, year);
1049- lc.setLed (3 , 7 , 1 , true ); // show setting dot
1130+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10501131 break ;
10511132 case 116 :
10521133 // turn 2 116 = t
10531134 if (receivedData > 1 ) {
10541135 receivedData = 0 ;
10551136 }
10561137 turnFont2 = receivedData;
1057- lc.setLed (2 , 7 , 5 , true ); // show setting dot
1138+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10581139 EEPROM.write (5 , turnFont2); // store turn font2 to addr 5
10591140 break ;
10601141 case 119 :
@@ -1064,7 +1145,7 @@ void SerialComm() {
10641145 }
10651146 dayOfWeek = receivedData;
10661147 SetRtc (second, minute, hour, dayOfWeek, dayOfMonth, month, year);
1067- lc.setLed (3 , 7 , 6 , true ); // show setting dot
1148+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
10681149 break ;
10691150 case 121 :
10701151 // year 121 = y
0 commit comments