Skip to content

Commit 34503bf

Browse files
authored
Update ArduinoMatrixClock.ino
1 parent faf3f01 commit 34503bf

File tree

1 file changed

+120
-39
lines changed

1 file changed

+120
-39
lines changed

ArduinoMatrixClock/ArduinoMatrixClock.ino

Lines changed: 120 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ https://www.mylms.cz/text-arduino-hodiny-s-maticovym-displejem/
1212
https://github.com/mylms/Arduino-Matrix-Clock
1313
1414
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
2323
2424
2525
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)
4040
4141
SERIAL COMMUNICATION (9600b)
4242
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)
4444
Command is case sensitive!! M01 and m01 are different commands.
4545
4646
y = year (0 - 99)
@@ -52,6 +52,7 @@ H = hour (0 - 23)
5252
M = minute (0 - 59)
5353
S = second (0 - 59)
5454
55+
D - show date (how many second per minute is shown date 00 = no, 60 = always)
5556
T = turn font 1
5657
t = turn font 2
5758
b = 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.
173174
byte timeMode1224 = 1; //12/24 hour mode 12 = 0, 24 = 1
174175
byte turnFont1 = 0; //font turning verticaly (one char)
175176
byte turnFont2 = 0; //font turning verticaly (all display)
177+
byte showDate = 0; //how many secon in one minute cycle is shown date
176178

177179
bool showDots; //dots are shown
178180
bool pmDotEnable = false; //pm dot is shown
179181
bool dayightTimeEnable = false; //is daylight time
182+
bool showDateNow = false; //now date is shown instead of time
180183

181184
void 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

Comments
 (0)