@@ -12,14 +12,14 @@ https://www.mylms.cz/text-arduino-hodiny-s-maticovym-displejem/
12
12
https://github.com/mylms/Arduino-Matrix-Clock
13
13
14
14
D2 - 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
23
23
24
24
25
25
NOTE 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)
40
40
41
41
SERIAL COMMUNICATION (9600b)
42
42
You 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)
44
44
Command is case sensitive!! M01 and m01 are different commands.
45
45
46
46
y = year (0 - 99)
@@ -52,6 +52,7 @@ H = hour (0 - 23)
52
52
M = minute (0 - 59)
53
53
S = second (0 - 59)
54
54
55
+ D - show date (how many second per minute is shown date 00 = no, 60 = always)
55
56
T = turn font 1
56
57
t = turn font 2
57
58
b = brightness (0 - 15)
@@ -108,7 +109,7 @@ const uint64_t symbols[] = {
108
109
0x0063954525956300 , // daylight saving
109
110
0x1f303e3333330000 , // y
110
111
0x00636b7f7f330000 , // m
111
- 0x0002020600000600 , // reserve
112
+ 0x001f36666666361f , // D
112
113
0x0002020600000e00 , // reserve
113
114
0x003e676f7b73633e , // font 1 - 0
114
115
0x007e181818181c18 ,
@@ -173,10 +174,12 @@ byte daylightSaving = 0; //daylight saving is enable from 31.3. to 27.10.
173
174
byte timeMode1224 = 1 ; // 12/24 hour mode 12 = 0, 24 = 1
174
175
byte turnFont1 = 0 ; // font turning verticaly (one char)
175
176
byte turnFont2 = 0 ; // font turning verticaly (all display)
177
+ byte showDate = 0 ; // how many secon in one minute cycle is shown date
176
178
177
179
bool showDots; // dots are shown
178
180
bool pmDotEnable = false ; // pm dot is shown
179
181
bool dayightTimeEnable = false ; // is daylight time
182
+ bool showDateNow = false ; // now date is shown instead of time
180
183
181
184
void setup () {
182
185
// COMMUNICATION
@@ -230,6 +233,12 @@ void setup() {
230
233
timeMode1224 = 1 ;
231
234
}
232
235
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
+
233
242
delay (10 ); // just delay...I thing I have had add it for correct function of display
234
243
235
244
// SET ALL DISPLAYS
@@ -494,10 +503,10 @@ void loop() {
494
503
495
504
// NEXT
496
505
systemState++;
497
- DrawSymbol (3 , 3 ); // F
506
+ DrawSymbol (3 , 18 ); // date
498
507
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
501
510
}
502
511
}
503
512
@@ -523,6 +532,43 @@ void loop() {
523
532
524
533
case 8 :
525
534
// 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
526
572
// set FONT
527
573
if (presentInput1 != lastInput1) {
528
574
// change detected BTN1
@@ -558,8 +604,8 @@ void loop() {
558
604
}
559
605
break ;
560
606
561
- case 9 :
562
- // menu 9
607
+ case 10 :
608
+ // menu 10
563
609
// set DOT STYLE
564
610
if (presentInput1 != lastInput1) {
565
611
// change detected BTN1
@@ -595,8 +641,8 @@ void loop() {
595
641
}
596
642
break ;
597
643
598
- case 10 :
599
- // menu 10
644
+ case 11 :
645
+ // menu 11
600
646
// set BRIGHTNES
601
647
if (presentInput1 != lastInput1) {
602
648
// change detected BTN1
@@ -636,8 +682,8 @@ void loop() {
636
682
}
637
683
break ;
638
684
639
- case 11 :
640
- // menu 11
685
+ case 12 :
686
+ // menu 12
641
687
// set TURN FONT 1
642
688
// Rotate each symbol separately (vertical)
643
689
if (presentInput1 != lastInput1) {
@@ -674,8 +720,8 @@ void loop() {
674
720
}
675
721
break ;
676
722
677
- case 12 :
678
- // menu 12
723
+ case 13 :
724
+ // menu 13
679
725
// set TURN FONT 2
680
726
// Rotate all display (verticaly)
681
727
if (presentInput1 != lastInput1) {
@@ -712,8 +758,8 @@ void loop() {
712
758
}
713
759
break ;
714
760
715
- case 13 :
716
- // menu 13
761
+ case 14 :
762
+ // menu 14
717
763
// EXIT
718
764
if (presentInput1 != lastInput1) {
719
765
// change detected BTN1
@@ -730,6 +776,7 @@ void loop() {
730
776
EEPROM.write (4 , turnFont1); // store turn font1 to addr 4
731
777
EEPROM.write (5 , turnFont2); // store turn font2 to addr 5
732
778
EEPROM.write (6 , timeMode1224); // store 12/24 mode to addr 6
779
+ EEPROM.write (7 , showDate); // store date time to eeprom
733
780
734
781
systemState = 0 ; // show actual time
735
782
}
@@ -751,6 +798,15 @@ void WriteTime() {
751
798
font = 1 ;
752
799
}
753
800
801
+ if (showDate > (60 - second)) {
802
+ // show date
803
+ showDateNow = true ;
804
+ }
805
+ else {
806
+ // show time
807
+ showDateNow = false ;
808
+ }
809
+
754
810
// write time to matrix display
755
811
if (systemState == 2 ) {
756
812
// show hours in 24h format in menu (set hours)
@@ -783,17 +839,28 @@ void WriteTime() {
783
839
pmDotEnable = false ;
784
840
}
785
841
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
+ }
788
855
}
789
856
790
- if (systemState == 0 || systemState == 3 ) {
857
+ if (( systemState == 0 && !showDateNow) || systemState == 3 ) {
791
858
// show minutes in normal state and "set minutes" state
792
859
DrawSymbol (0 , (minute % 10 ) + (font * 10 ) + fontOffset - 10 );
793
860
DrawSymbol (1 , (minute / 10 ) + (font * 10 ) + fontOffset - 10 );
794
861
}
795
862
796
- if (systemState == 0 ) {
863
+ if (systemState == 0 && !showDateNow ) {
797
864
// TIME
798
865
switch (dotStyle) {
799
866
case 0 :
@@ -853,6 +920,11 @@ void DrawSymbol(byte adr, byte symbol) {
853
920
if (i == 5 ) lc.setLed (2 , 5 , 7 , showDots);
854
921
if (i == 6 ) lc.setLed (2 , 6 , 7 , showDots);
855
922
}
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
+ }
856
928
857
929
if (adr == 0 ) {
858
930
lc.setLed (0 , 7 , 7 , pmDotEnable);
@@ -955,7 +1027,7 @@ void SerialComm() {
955
1027
receivedData = 1 ;
956
1028
}
957
1029
timeMode1224 = receivedData;
958
- lc.setLed (2 , 7 , 6 , true ); // show setting dot
1030
+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
959
1031
EEPROM.write (6 , timeMode1224); // store 12/24 mode to addr 6
960
1032
break ;
961
1033
case 58 :
@@ -964,17 +1036,26 @@ void SerialComm() {
964
1036
receivedData = 2 ;
965
1037
}
966
1038
dotStyle = receivedData;
967
- lc.setLed (2 , 7 , 3 , true ); // show setting dot
1039
+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
968
1040
EEPROM.write (2 , dotStyle); // store actual font to addr 2
969
1041
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 ;
970
1051
case 72 :
971
1052
// hour 72 = H
972
1053
if (receivedData > 23 ) {
973
1054
receivedData = 23 ;
974
1055
}
975
1056
hour = receivedData;
976
1057
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
978
1059
break ;
979
1060
case 77 :
980
1061
// minute 77 = M
@@ -983,7 +1064,7 @@ void SerialComm() {
983
1064
}
984
1065
minute = receivedData;
985
1066
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
987
1068
break ;
988
1069
case 83 :
989
1070
// second 83 = S
@@ -992,15 +1073,15 @@ void SerialComm() {
992
1073
}
993
1074
second = receivedData;
994
1075
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
996
1077
break ;
997
1078
case 84 :
998
1079
// turn 1 84 = T
999
1080
if (receivedData > 1 ) {
1000
1081
receivedData = 0 ;
1001
1082
}
1002
1083
turnFont1 = receivedData;
1003
- lc.setLed (2 , 7 , 4 , true ); // show setting dot
1084
+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
1004
1085
EEPROM.write (4 , turnFont1); // store turn font1 to addr 4
1005
1086
break ;
1006
1087
case 98 :
@@ -1014,7 +1095,7 @@ void SerialComm() {
1014
1095
lc.setIntensity (address, bright); // set light intensity 0 - min, 15 - max
1015
1096
}
1016
1097
1017
- lc.setLed (2 , 7 , 1 , true ); // show setting dot
1098
+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
1018
1099
EEPROM.write (0 , bright); // store actual light intensity to addr 0
1019
1100
break ;
1020
1101
case 100 :
@@ -1024,7 +1105,7 @@ void SerialComm() {
1024
1105
}
1025
1106
dayOfMonth = receivedData;
1026
1107
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
1028
1109
break ;
1029
1110
case 102 :
1030
1111
// font 102 = f
@@ -1036,7 +1117,7 @@ void SerialComm() {
1036
1117
receivedData = 1 ;
1037
1118
}
1038
1119
font = receivedData;
1039
- lc.setLed (2 , 7 , 2 , true ); // show setting dot
1120
+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
1040
1121
EEPROM.write (1 , font); // store actual font to addr 1
1041
1122
break ;
1042
1123
case 109 :
@@ -1046,15 +1127,15 @@ void SerialComm() {
1046
1127
}
1047
1128
month = receivedData;
1048
1129
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
1050
1131
break ;
1051
1132
case 116 :
1052
1133
// turn 2 116 = t
1053
1134
if (receivedData > 1 ) {
1054
1135
receivedData = 0 ;
1055
1136
}
1056
1137
turnFont2 = receivedData;
1057
- lc.setLed (2 , 7 , 5 , true ); // show setting dot
1138
+ lc.setLed (3 , 7 , 0 , true ); // show setting dot
1058
1139
EEPROM.write (5 , turnFont2); // store turn font2 to addr 5
1059
1140
break ;
1060
1141
case 119 :
@@ -1064,7 +1145,7 @@ void SerialComm() {
1064
1145
}
1065
1146
dayOfWeek = receivedData;
1066
1147
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
1068
1149
break ;
1069
1150
case 121 :
1070
1151
// year 121 = y
0 commit comments