Created
October 11, 2022 01:16
-
-
Save ohidurbappy/b8f75827f3f1daf23d1adc09e8d157cb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SoftwareSerial.h> | |
#include <MD_Parola.h> | |
#include <MD_MAX72xx.h> | |
#include <SPI.h> | |
#include <EEPROM.h> | |
#include "RTClib.h" | |
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW | |
#define MAX_DEVICES 4 | |
#define CLK_PIN 13 | |
#define DATA_PIN 11 | |
#define CS_PIN 10 | |
#define DHT11PIN 4 | |
#define rxPin 2 | |
#define txPin 3 | |
SoftwareSerial hc05(txPin, rxPin); | |
RTC_DS1307 rtc; | |
char buffer[32]; | |
char runtext[128]; | |
char daysOfTheWeek[7][7] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"}; | |
char zero[2][2] = {"", "0"}; | |
int zero1 = 0, zero2 = 0, zero3 = 0, hr, mn, sc, ds=0, yy, mm, dd, hh, nn, ss, h12=2, brg; | |
long millis1, millis2; | |
bool timeonce = false, noclear=true, once = false; | |
String msg; | |
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); | |
DateTime now; | |
MD_MAX72XX::fontType_t myFont[] PROGMEM = | |
{ | |
0, // 0 - 'Unused' | |
0, // 1 - 'Unused' | |
0, // 2 - 'Unused' | |
0, // 3 - 'Unused' | |
0, // 4 - 'Unused' | |
0, // 5 - 'Unused' | |
0, // 6 - 'Unused' | |
0, // 7 - 'Unused' | |
0, // 8 - 'Unused' | |
0, // 9 - 'Unused' | |
0, // 10 - 'Unused' | |
0, // 11 - 'Unused' | |
0, // 12 - 'Unused' | |
0, // 13 - 'Unused' | |
0, // 14 - 'Unused' | |
0, // 15 - 'Unused' | |
0, // 16 - 'Unused' | |
0, // 17 - 'Unused' | |
0, // 18 - 'Unused' | |
0, // 19 - 'Unused' | |
0, // 20 - 'Unused' | |
0, // 21 - 'Unused' | |
0, // 22 - 'Unused' | |
0, // 23 - 'Unused' | |
0, // 24 - 'Unused' | |
0, // 25 - 'Unused' | |
0, // 26 - 'Unused' | |
0, // 27 - 'Unused' | |
0, // 28 - 'Unused' | |
0, // 29 - 'Unused' | |
0, // 30 - 'Unused' | |
0, // 31 - 'Unused' | |
2, 0, 0, // 32 - 'Space' | |
0, // 33 - '!' | |
0, // 34 - '"' | |
0, // 35 - '#' | |
0, // 36 - '$' | |
5, 32, 16, 42, 4, 2, // 37 - '%' | |
0, // 38 - '&' | |
0, // 39 | |
0, // 40 - '(' | |
0, // 41 - ')' | |
0, // 42 - '*' | |
0, // 43 - '+' | |
0, // 44 ' | |
0, // 45 - '-' | |
0, // 46 - '.' | |
4, 32, 16, 8, 4, // 47 - '/' | |
3, 126, 66, 126, // 48 - '0' | |
3, 0, 126, 0, // 49 - '1' | |
3, 122, 74, 78, // 50 - '2' | |
3, 74, 74, 126, // 51 - '3' | |
3, 14, 8, 126, // 52 - '4' | |
3, 78, 74, 122, // 53 - '5' | |
3, 126, 74, 122, // 54 - '6' | |
3, 2, 2, 126, // 55 - '7' | |
3, 126, 74, 126, // 56 - '8' | |
3, 78, 74, 126, // 57 - '9' | |
1, 36, // 58 - ':' | |
0, // 59 | |
3, 16, 40, 68, // 60 | |
0, // 61 | |
3, 68, 40, 16, // 62 | |
0, // 63 | |
0, // 64 | |
0, // 65 | |
0, // 66 | |
4, 126, 66, 66, 66, // 67 | |
0, // 68 | |
0, // 69 | |
0, // 70 | |
4, 126, 66, 82, 114, // 71 | |
4, 126, 8, 8, 126, // 72 | |
0, // 73 | |
4, 96, 64, 64, 126, // 74 | |
4, 126, 24, 36, 66, // 75 | |
0, // 76 | |
5, 126, 4, 8, 4, 126, // 77 | |
0, // 78 | |
0, // 79 | |
0, // 80 | |
0, // 81 | |
4, 126, 18, 50, 78, // 82 | |
4, 94, 82, 82, 114, // 83 | |
5, 2, 2, 126, 2, 2, // 84 | |
0, // 85 | |
0, // 86 | |
0, // 87 | |
0, // 88 | |
5, 2, 4, 120, 4, 2, // 89 | |
0, // 90 | |
0, // 91 | |
0, // 92 | |
0, // 93 | |
0, // 94 | |
0, // 95 | |
0, // 96 | |
4, 116, 84, 84, 124, // 97 | |
4, 126, 72, 72, 120, // 98 | |
0, // 99 | |
0, // 100 | |
4, 124, 84, 84, 92, // 101 | |
0, // 102 | |
4, 92, 84, 84, 124, // 103 | |
0, // 104 | |
1, 116, // 105 | |
3, 96, 64, 124, // 106 | |
4, 126, 16, 40, 68, // 107 | |
1, 126, // 108 | |
5, 124, 4, 124, 4, 124, // 109 | |
4, 124, 4, 4, 124, // 110 | |
4, 124, 68, 68, 124, // 111 | |
4, 124, 20, 20, 28, // 112 | |
0, // 113 | |
4, 124, 4, 4, 4, // 114 | |
4, 92, 84, 84, 116, // 115 | |
3, 4, 126, 68, // 116 | |
4, 124, 64, 64, 124, // 117 | |
5, 28, 32, 64, 32, 28, // 118 | |
0, // 119 | |
0, // 120 | |
0, // 121 | |
0, // 122 | |
0, // 123 | |
0, // 124 | |
0, // 125 | |
0, // 126 | |
0, // 127 | |
0, // 128 | |
0, // 129 | |
0, // 130 | |
0, // 131 | |
0, // 132 | |
0, // 133 | |
0, // 134 | |
0, // 135 | |
0, // 136 | |
0, // 137 | |
0, // 138 | |
0, // 139 | |
0, // 140 | |
0, // 141 | |
0, // 142 | |
0, // 143 | |
0, // 144 | |
0, // 145 | |
0, // 146 | |
0, // 147 | |
0, // 148 | |
0, // 149 | |
0, // 150 | |
0, // 151 | |
0, // 152 | |
0, // 153 | |
0, // 154 | |
0, // 155 | |
0, // 156 | |
0, // 157 | |
0, // 158 | |
0, // 159 | |
0, // 160 | |
0, // 161 | |
0, // 162 | |
0, // 163 | |
0, // 164 | |
0, // 165 | |
0, // 166 | |
0, // 167 | |
0, // 168 | |
0, // 169 | |
0, // 170 | |
0, // 171 | |
0, // 172 | |
0, // 173 | |
0, // 174 | |
0, // 175 | |
0, // 176 | |
0, // 177 | |
0, // 178 | |
0, // 179 | |
0, // 180 | |
0, // 181 | |
0, // 182 | |
0, // 183 | |
0, // 184 | |
0, // 185 | |
2, 6, 6, // 186 | |
}; | |
void setup() | |
{ | |
Serial.begin(9600); | |
hc05.begin(9600); | |
if(EEPROM.read(0)) | |
{ | |
brg = EEPROM.read(0); | |
} | |
if(EEPROM.read(1)) | |
{ | |
h12 = EEPROM.read(1); | |
} | |
if(EEPROM.read(2)) | |
{ | |
String ntx = ""; | |
for(int er=0;er<EEPROM.read(2);er++) | |
{ | |
ntx += char(EEPROM.read(er+3)); | |
} | |
sprintf(runtext, "%s", (char *) ntx.c_str()); | |
} | |
if (! rtc.begin()) { | |
while (1); | |
} | |
if (! rtc.isrunning()) { | |
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); | |
} | |
myDisplay.begin(); | |
myDisplay.setFont(myFont); | |
myDisplay.setIntensity(brg); | |
myDisplay.displayClear(); | |
now = rtc.now(); | |
millis1 = millis(); | |
} | |
void loop() | |
{ | |
if (hc05.available() > 0) | |
{ | |
String cmds = hc05.readStringUntil(':'); | |
String vals = hc05.readStringUntil(';'); | |
int id = atoi((const char *) cmds.c_str()); | |
if(id==0) | |
{ | |
brg = atoi((const char *) vals.c_str()); | |
EEPROM.write(0, brg); | |
myDisplay.setIntensity(brg); | |
} | |
if(id==1) | |
{ | |
h12 = atoi((const char *) vals.c_str()); | |
EEPROM.write(1, h12); | |
} | |
if(id==2) | |
hh = atoi((const char *) vals.c_str()); | |
if(id==3) | |
nn = atoi((const char *) vals.c_str()); | |
if(id==4) | |
ss = atoi((const char *) vals.c_str()); | |
if(id==5) | |
dd = atoi((const char *) vals.c_str()); | |
if(id==6) | |
mm = atoi((const char *) vals.c_str()); | |
if(id==7) | |
yy = atoi((const char *) vals.c_str()); | |
if(id==8) | |
{ | |
sprintf(runtext, "%s", (char *) vals.c_str()); | |
EEPROM.write(2, strlen(runtext)); | |
for(int cc=0;cc<strlen(runtext);cc++) | |
{ | |
EEPROM.write(cc+3, runtext[cc]); | |
} | |
} | |
once = true; | |
} | |
now = rtc.now(); | |
if(once) | |
{ | |
once = false; | |
if(hh==0) | |
hh = now.hour(); | |
if(nn==0) | |
nn = now.minute(); | |
if(ss==0) | |
ss = now.second(); | |
if(dd==0) | |
dd = now.day(); | |
if(mm==0) | |
mm = now.month(); | |
if(yy==0) | |
yy = now.year(); | |
rtc.adjust(DateTime(yy, mm, dd, hh, nn, ss)); | |
} | |
if(ds==0) | |
{ | |
myDisplay.setFont(myFont); | |
hr = now.hour(); | |
mn = now.minute(); | |
sc = now.second(); | |
if(hr>12 && h12==1) | |
{ | |
hr = hr-12; | |
} | |
zero1 = 0; | |
if(hr<10) | |
zero1 = 1; | |
zero2 = 0; | |
if(mn<10) | |
zero2 = 1; | |
zero3 = 0; | |
if(sc<10) | |
zero3 = 1; | |
sprintf(buffer, "%s%d:%s%d:%s%d", zero[zero1], hr, zero[zero2], mn, zero[zero3], sc); | |
myDisplay.displayText(buffer, PA_CENTER, 50, 500, PA_SCROLL_UP, PA_NO_EFFECT); | |
ds = 1; | |
millis2 = 0; | |
timeonce = true; | |
} | |
if(ds==2) | |
{ | |
if(timeonce) | |
{ | |
timeonce=false; | |
millis2=10000; | |
} | |
hh = now.hour(); | |
mn = now.minute(); | |
sc = now.second(); | |
if(hr>12 && h12==1) | |
{ | |
hr = hr-12; | |
} | |
zero1 = 0; | |
if(hr<10) | |
zero1 = 1; | |
zero2 = 0; | |
if(mn<10) | |
zero2 = 1; | |
zero3 = 0; | |
if(sc<10) | |
zero3 = 1; | |
sprintf(buffer, "%s%d:%s%d:%s%d", zero[zero1], hr, zero[zero2], mn, zero[zero3], sc); | |
myDisplay.print(buffer); | |
delay(1000); | |
noclear=true; | |
} | |
if(ds==3) | |
{ | |
noclear=false; | |
millis2=0; | |
hr = now.hour(); | |
mn = now.minute(); | |
sc = now.second(); | |
if(hr>12 && h12==1) | |
{ | |
hr = hr-12; | |
} | |
zero1 = 0; | |
if(hr<10) | |
zero1 = 1; | |
zero2 = 0; | |
if(mn<10) | |
zero2 = 1; | |
zero3 = 0; | |
if(sc<10) | |
zero3 = 1; | |
sprintf(buffer, "%s%d:%s%d:%s%d", zero[zero1], hr, zero[zero2], mn, zero[zero3], sc); | |
myDisplay.displayText(buffer, PA_CENTER, 50, 50, PA_NO_EFFECT, PA_SCROLL_UP); | |
ds=4; | |
} | |
if(ds==5) | |
{ | |
millis2=0; | |
ds=6; | |
sprintf(buffer,"%s", daysOfTheWeek[now.dayOfTheWeek()]); | |
myDisplay.displayText(buffer, PA_CENTER, 50, 1500, PA_SCROLL_UP, PA_SCROLL_UP); | |
} | |
if(ds==7) | |
{ | |
millis2=0; | |
ds=8; | |
sprintf(buffer, "%d/%d/%d", now.day(), now.month(), (now.year()-2000)); | |
myDisplay.displayText(buffer, PA_CENTER, 50, 1500, PA_SCROLL_UP, PA_SCROLL_UP); | |
} | |
if(ds==9) | |
{ | |
ds=12; | |
millis2=0; | |
if (String(runtext).length() > 0) | |
{ | |
myDisplay.setFont(0); | |
millis2=5000; | |
sprintf(buffer, "%s", runtext); | |
myDisplay.displayText(buffer, PA_CENTER, 60, 60, PA_SCROLL_LEFT, PA_SCROLL_LEFT); | |
} | |
} | |
/* | |
PA_BLINDS : MD_Parola.h | |
PA_CENTER : MD_Parola.h | |
PA_CLOSING : MD_Parola.h | |
PA_CLOSING_CURSOR : MD_Parola.h | |
PA_DISSOLVE : MD_Parola.h | |
PA_FADE : MD_Parola.h | |
PA_FLIP_LR : MD_Parola.h | |
PA_FLIP_UD : MD_Parola.h | |
PA_GROW_DOWN : MD_Parola.h | |
PA_GROW_UP : MD_Parola.h | |
PA_LEFT : MD_Parola.h | |
PA_MESH : MD_Parola.h | |
PA_NO_EFFECT : MD_Parola.h | |
PA_OPENING : MD_Parola.h | |
PA_OPENING_CURSOR : MD_Parola.h | |
PA_PRINT : MD_Parola.h | |
PA_RANDOM : MD_Parola.h | |
PA_RIGHT : MD_Parola.h | |
PA_SCAN_HORIZ : MD_Parola.h | |
PA_SCAN_HORIZX : MD_Parola.h | |
PA_SCAN_VERT : MD_Parola.h | |
PA_SCAN_VERTX : MD_Parola.h | |
PA_SCROLL_DOWN : MD_Parola.h | |
PA_SCROLL_DOWN_LEFT : MD_Parola.h | |
PA_SCROLL_DOWN_RIGHT : MD_Parola.h | |
PA_SCROLL_LEFT : MD_Parola.h | |
PA_SCROLL_RIGHT : MD_Parola.h | |
PA_SCROLL_UP : MD_Parola.h | |
PA_SCROLL_UP_LEFT : MD_Parola.h | |
PA_SCROLL_UP_RIGHT : MD_Parola.h | |
PA_SLICE : MD_Parola.h | |
PA_SPRITE : MD_Parola.h | |
PA_WIPE : MD_Parola.h | |
PA_WIPE_CURSOR : MD_Parola.h | |
PRINT : MD_Parola_lib.h | |
PRINT_STATE : MD_Parola_lib.h | |
PRINTS : MD_Parola_lib.h | |
PRINTX : MD_Parola_lib.h | |
*/ | |
if (myDisplay.displayAnimate()) { | |
if( millis() > (millis1+millis2) ) | |
{ | |
ds++; | |
millis1 = millis(); | |
if(ds>12) | |
ds=0; | |
if(!timeonce) | |
{ | |
if(!noclear) | |
myDisplay.displayClear(); | |
} | |
} | |
else | |
{ | |
myDisplay.displayReset(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment