Skip to content

Instantly share code, notes, and snippets.

@ohidurbappy
Created October 11, 2022 01:16
Show Gist options
  • Save ohidurbappy/b8f75827f3f1daf23d1adc09e8d157cb to your computer and use it in GitHub Desktop.
Save ohidurbappy/b8f75827f3f1daf23d1adc09e8d157cb to your computer and use it in GitHub Desktop.
#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