#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <MsTimer2.h>
#include <SPI.h>
#include <Wire.h>
#include <EEPROM.h>
#include "RTClib.h"
RTC_DS3231 rtc;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
String input_string;
#define button1 A0 // Button B1 is connected to Arduino pin 9
#define button2 A1
int dataPin = 6;
int latchPin = 5;
int clockPin = 3;
int strsize;
int flag1 = 0, flag2 = 0, flag3 = 0, flag4 = 0, flag5 = 0, flag6 = 0, flag7 = 0, flag8 = 0,flag9=0;
int flicker = 0;
int RLED1 = 9;
int GLED1 = 10;
int y, m, d, h, mi, s;
int temp1, temp2, temp3, temp4;
int BT = 0;
int t1 = 0;
int selected = 0;
int entered = 0;
int M1=0,M2=0,M3=0;
byte OP[5];
unsigned char my_str[5], password[5];
byte JJ[5];
byte cmd[20];
byte dd[10];
byte tt[10];
byte ss;
byte rr;
char Time[] = " : : ";
char Calendar[] = " / /20 ";
char temperature[] = " 00.00";
char temperature_msb;
String daysOfWeek[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
byte i, second, minute, hour, day, date, month, year, temperature_lsb;
static const unsigned char PROGMEM logo_bmp1[] = { //僑
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X87,0X80,0X01,0X78,0X00,0X01,
0X08,0X40,0X02,0XFF,0XE0,0X02,0X11,0X00,0X06,0X3F,0X80,0X0A,0XD1,0X60,0X02,0X1F,
0X00,0X02,0X00,0X00,0X02,0X7F,0XE0,0X02,0X40,0X20,0X02,0X5F,0X20,0X02,0X51,0X20,
0X02,0X5F,0X20,0X02,0X40,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00};
static const unsigned char PROGMEM logo_bmp2[] = { //僑泰
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,
0X3C,0X01,0X80,0X00,0X0B,0XC0,0X01,0X00,0X00,0X08,0X42,0X3F,0XFE,0X00,0X17,0XFF,
0X02,0X00,0X00,0X10,0X88,0X0F,0XF8,0X00,0X31,0XFC,0X04,0X00,0X00,0X56,0X8B,0X7F,
0XFF,0X00,0X10,0XF8,0X08,0X08,0X00,0X10,0X00,0X10,0XC4,0X00,0X13,0XFF,0X28,0X8A,
0X00,0X12,0X01,0X44,0X91,0X00,0X12,0XF9,0X02,0XB0,0X00,0X12,0X89,0X0C,0X8C,0X00,
0X12,0XF9,0X30,0X84,0X00,0X12,0X03,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00};
static const unsigned char PROGMEM logo_bmp3[] = { //僑太高
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X18,0X78,0X03,0X00,0X02,0X00,0X00,0X17,0X80,0X02,0X00,
0X01,0X04,0X00,0X10,0X84,0X7F,0XFC,0XFF,0XFE,0X00,0X2F,0XFE,0X04,0X00,0X00,0X00,
0X00,0X21,0X10,0X1F,0XF0,0X1F,0XE0,0X00,0X63,0XF8,0X08,0X00,0X10,0X20,0X00,0XAD,
0X16,0XFF,0XFE,0X1F,0XE0,0X00,0X21,0XF0,0X10,0X10,0X40,0X04,0X00,0X20,0X00,0X21,
0X88,0X7F,0XFE,0X00,0X27,0XFE,0X51,0X14,0X40,0X04,0X00,0X24,0X02,0X89,0X22,0X4F,
0XC4,0X00,0X25,0XF2,0X05,0X60,0X48,0X44,0X00,0X25,0X12,0X19,0X18,0X4F,0XC4,0X00,
0X25,0XF2,0X61,0X08,0X40,0X1C,0X00,0X24,0X06,0X07,0X00,0X40,0X08,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00};
static const unsigned char PROGMEM logo_bmp4[] = { //僑泰高中
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X78,0X03,0X00,0X02,
0X00,0X01,0X80,0X00,0X17,0X80,0X02,0X00,0X01,0X04,0X01,0X00,0X00,0X10,0X84,0X7F,
0XFC,0XFF,0XFE,0X01,0X00,0X00,0X2F,0XFE,0X04,0X00,0X00,0X00,0X41,0X04,0X00,0X21,
0X10,0X1F,0XF0,0X1F,0XE0,0X7F,0XFE,0X00,0X63,0XF8,0X08,0X00,0X10,0X20,0X41,0X04,
0X00,0XAD,0X16,0XFF,0XFE,0X1F,0XE0,0X41,0X04,0X00,0X21,0XF0,0X10,0X10,0X40,0X04,
0X41,0X04,0X00,0X20,0X00,0X21,0X88,0X7F,0XFE,0X41,0X04,0X00,0X27,0XFE,0X51,0X14,
0X40,0X04,0X7F,0XFC,0X00,0X24,0X02,0X89,0X22,0X4F,0XC4,0X41,0X04,0X00,0X25,0XF2,
0X05,0X60,0X48,0X44,0X01,0X00,0X00,0X25,0X12,0X19,0X18,0X4F,0XC4,0X01,0X00,0X00,
0X25,0XF2,0X61,0X08,0X40,0X1C,0X01,0X00,0X00,0X24,0X06,0X07,0X00,0X40,0X08,0X01,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00};
void testdrawbitmap1(void) //
{
display.clearDisplay();
display.setTextSize(2);
display.setCursor(25, 0);
display.print("C0636");
display.drawBitmap(0, 20, logo_bmp1, 23, 21, 1);
display.display();
}
void testdrawbitmap2(void) //
{
display.clearDisplay();
display.setTextSize(2);
display.setCursor(25, 0);
display.print("C0636");
display.drawBitmap(0, 20, logo_bmp2, 33, 21, 1);
display.display();
}
void testdrawbitmap3(void) //
{
display.clearDisplay();
display.setTextSize(2);
display.setCursor(25, 0);
display.print("C0636");
display.drawBitmap(0, 20, logo_bmp3, 51, 21, 1);
display.display();
}
void testdrawbitmap4(void) //
{
display.clearDisplay();
display.setTextSize(2);
display.setCursor(25, 0);
display.print("C0636");
display.drawBitmap(0, 20, logo_bmp4, 67, 21, 1);
display.display();
}
void onTimer()
{
if (BT == 1)
{
flicker++;
}
if ((strsize = (Serial.available())) > 0) // 如有藍芽封包資料,進入將資料存起來
{
for (int i = 0; i < strsize; i++)
{
cmd[i] = char(Serial.read());
}
if (cmd[0] == 0X1A && cmd[1] == 0x01) // 藍芽連線
{
BT = 1;
}
else if (cmd[0] == 0X1A && cmd[1] == 0x02) // 藍芽關閉
{
BT = 2;
}
else if (cmd[0] == 0X1B && cmd[1] == 0x01) // 動作1
{
BT = 1;
flag5 = 1;
}
else if (cmd[0] == 0x1C && cmd[1] == 0x02) // 動作2
{
BT = 1;
JJ[0] = cmd[2];
JJ[1] = cmd[3];
JJ[2] = cmd[4];
flag4=6;
}
else if (cmd[0] == 0x1D && cmd[1] == 0x01) // 接收密碼
{
my_str[0] = cmd[2];
my_str[1] = cmd[3];
my_str[2] = cmd[4];
flag3 = 1;
}
else if (cmd[0] == 0x1D && cmd[1] == 0x02) // 接收訊號之後記憶
{
//flag1 = 7;
}
else if (cmd[0] == 0x3A && cmd[1] == 0x01) // 接收電腦時間RTC可記錄
{
dd[0] = cmd[2];
dd[1] = cmd[3];
dd[2] = cmd[4];
dd[3] = cmd[5];
dd[4] = cmd[6];
dd[5] = cmd[7];
dd[6] = cmd[8];
dd[7] = cmd[9];
tt[0] = cmd[10];
tt[1] = cmd[11];
tt[2] = cmd[12];
tt[3] = cmd[13];
tt[4] = cmd[14];
tt[5] = cmd[15];
BT = 1;
flag7 = 1;
}
else if (cmd[0] == 0x4A && cmd[1] == 0x03) //
{
my_str[0] = cmd[2];
show74595(my_str[0]);
BT = 1;
}
}
}
void setup()
{
Serial.begin(57600);
MsTimer2::set(20, onTimer);
MsTimer2::start();
pinMode(RLED1, OUTPUT);
pinMode(GLED1, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
show74595(0);
rtc.begin();
//rtc.adjust(DateTime(2021, 01, 12, 04, 16, 11));
digitalWrite(RLED1, HIGH);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(25, 0);
testdrawbitmap1();
delay(1000);
testdrawbitmap2();
delay(1000);
testdrawbitmap3();
delay(1000);
testdrawbitmap4();
delay(1000);
display.display();
}
void loop()
{
if (BT == 0)
{
int gg1 = 0, gg2 = 0, gg3 = 0, gg4 = 0;
int mm1 = 2000, mm2 = 1, mm3 = 1, mm4 = 0;
if (digitalRead(A1) == LOW)
{
selected = selected + 1;
delay(200);
};
if (digitalRead(A0) == LOW)
{
selected = selected - 1;
delay(200);
};
if (digitalRead(A2) == LOW)
{
entered = 1;
delay(200);
};
if (digitalRead(A3) == LOW)
{
selected = 0;
entered = 0;
}
if (selected == 0 && entered == 0) // SET TIME
{
display.clearDisplay();
display.fillRect(0, 0, 128, 15, SSD1306_WHITE);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK);
display.setCursor(10, 0);
display.println("SET TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SET DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 48);
display.println("SHOW DATA");
display.display();
display.display();
delay(200);
}
else if (selected == 1 && entered == 0) // SET DATA
{
display.clearDisplay();
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_WHITE);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SET TIME");
display.setTextColor(SSD1306_BLACK);
display.setCursor(10, 16);
display.println("SET DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 48);
display.println("SHOW DATA");
display.display();
display.display();
delay(200);
}
else if (selected == 2 && entered == 0) // SHOW TIME
{
display.clearDisplay();
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_WHITE);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SET TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SET DATA");
display.setTextColor(SSD1306_BLACK);
display.setCursor(10, 32);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 48);
display.println("SHOW DATA");
display.display();
display.display();
delay(200);
}
else if (selected == 3 && entered == 0) // SHOW DATA
{
display.clearDisplay();
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_WHITE);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SET TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SET DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("SHOW TIME");
display.setTextColor(SSD1306_BLACK);
display.setCursor(10, 48);
display.println("SHOW DATA");
display.display();
display.display();
delay(200);
}
while (selected == 0 && entered == 1) // 設定時間
{
if (digitalRead(A3) == LOW)
{
rtc.adjust(DateTime(mm1, mm2, mm3, gg1, gg2, gg3));
break;
}
if (digitalRead(A2) == LOW)
{
gg4 += 1;
delay(200);
}
if (gg4 == 0)
{
if (digitalRead(A0) == LOW)
{
gg1 = gg1 + 1;
delay(200);
if (gg1 > 11)
{
gg1 = 0;
}
}
if (digitalRead(A1) == LOW)
{
gg1 = gg1 - 1;
delay(200);
if (gg1 < 1)
{
gg1 = 12;
}
}
}
if (gg4 == 1)
{
if (digitalRead(A0) == LOW)
{
gg2 = gg2 + 1;
delay(200);
if (gg2 > 59)
{
gg2 = 0;
}
}
if (digitalRead(A1) == LOW)
{
gg2 = gg2 - 1;
delay(200);
if (gg2 < 0)
{
gg2 = 59;
}
}
}
if (gg4 == 2)
{
if (digitalRead(A0) == LOW)
{
gg3 = gg3 + 1;
delay(200);
if (gg3 > 59)
{
gg3 = 0;
}
}
if (digitalRead(A1) == LOW)
{
gg3 = gg3 - 1;
delay(200);
if (gg3 < 0)
{
gg3 = 59;
}
}
}
display.clearDisplay();
display.setTextColor(2);
display.setCursor(0, 10);
display.print(gg1);
display.print(':');
display.print(gg2);
display.print(':');
display.print(gg3);
display.display();
}
while (selected == 1 && entered == 1) // 設定日期
{
if (digitalRead(A3) == LOW)
{
rtc.adjust(DateTime(mm1, mm2, mm3, gg1, gg2, gg3));
break;
}
if (digitalRead(A2) == LOW)
{
mm4 += 1;
delay(200);
}
if (mm4 == 0)
{
if (digitalRead(A0) == LOW)
{
mm1 = mm1 + 1;
delay(200);
if (mm1 > 2100)
{
mm1 = 2000;
}
}
if (digitalRead(A1) == LOW)
{
mm1 = mm1 - 1;
delay(200);
if (mm1 < 2000)
{
mm1 = 2100;
}
}
}
if (mm4 == 1)
{
if (digitalRead(A0) == LOW)
{
mm2 = mm2 + 1;
delay(200);
if (mm2 > 12)
{
mm2 = 1;
}
}
if (digitalRead(A1) == LOW)
{
mm2 = mm2 - 1;
delay(200);
if (mm2 < 1)
{
mm2 = 12;
}
}
}
if (mm4 == 2)
{
if (digitalRead(A0) == LOW)
{
mm3 = mm3 + 1;
delay(200);
if (mm3 > 30)
{
mm3 = 1;
}
}
if (digitalRead(A1) == LOW)
{
mm3 = mm3 - 1;
delay(200);
if (mm3 < 1)
{
mm3 = 30;
}
}
}
display.clearDisplay();
display.setTextColor(2);
display.setCursor(0, 10);
display.print(mm1);
display.print(':');
display.print(mm2);
display.print(':');
display.print(mm3);
display.display();
}
if (selected == 2 && entered == 1) // 秀時間
{
DateTime now = rtc.now();
display.clearDisplay();
display.setTextColor(2);
display.setCursor(0, 10);
display.print(now.hour(), DEC);
display.print(':');
display.print(now.minute(), DEC);
display.print(':');
display.print(now.second(), DEC);
display.display();
delay(100);
}
if (selected == 3 && entered == 1) // 秀日期
{
DateTime now = rtc.now();
display.clearDisplay();
display.setTextColor(2);
display.setCursor(0, 10);
display.print(now.year(), DEC);
display.print('/');
display.print(now.month(), DEC);
display.print('/');
display.print(now.day(), DEC);
display.display();
delay(100);
}
}
/*if (BT == 2)
{
digitalWrite(9, 1);
}
if (BT == 1)
{
int S1 = digitalRead(A0);
int S2 = digitalRead(A1);
int S3 = digitalRead(A2);
int S4 = digitalRead(A3);
int selected = 100;
int entered = 100;
if (flicker < 25) // LED閃爍0.5秒
{
digitalWrite(RLED1, HIGH);
}
else if (flicker > 25 && flicker < 40)
{
digitalWrite(RLED1, LOW);
}
else if (flicker > 40)
{
flicker = 0;
}
if (flag7 == 1) // 通過電腦時間紀錄RTC
{
change();
rtc.adjust(DateTime(y, m, d, h, mi, s));
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SHOW DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("TEMP");
display.display();
flag7 = 0;
}
// if (flag5 == 1) // 顯示錯誤
// {
// display.setCursor(0, 10);
// display.clearDisplay();
// display.print("ERROR!");
// display.display();
// }
if (S1 == LOW)
{
flag9++;
delay(50);
}
if (flag9 == 1)
{
selected = 100;
entered = 100;
display.clearDisplay();
display.setTextColor(2);
DateTime now = rtc.now();
display.setCursor(0, 10);
display.print(now.hour(), DEC);
display.print(':');
display.print(now.minute(), DEC);
display.print(':');
display.print(now.second(), DEC);
display.display();
delay(100);
}
else if (flag9 == 2)
{
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SHOW DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("TEMP");
display.display();
flag9++;
}
if (S2 == LOW)
{
flag8++;
delay(50);
}
if (flag8 == 1)
{
selected = 100;
entered = 100;
display.clearDisplay();
display.setTextColor(2);
DateTime now = rtc.now();
display.setCursor(0, 10);
display.print(now.year(), DEC);
display.print('/');
display.print(now.month(), DEC);
display.print('/');
display.print(now.day(), DEC);
display.display();
delay(100);
}
else if (flag8 == 2)
{
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SHOW DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("TEMP");
display.display();
flag8++;
}
if (S3 == LOW) // 傳送溫度
{
flag6++;
delay(50);
}
if (flag6 == 1)
{
byte FF[4];
FF[0] = 0xA2;
long ab = long((rtc.getTemperature() * 10));
FF[1] = ab / 100;
FF[2] = (ab % 100) / 10;
FF[3] = ab % 10;
Serial.write(FF, 6);
display.setCursor(0, 10);
display.clearDisplay();
display.print(rtc.getTemperature(), 1);
display.display();
delay(10);
}
else if (flag6 == 2)
{
display.fillRect(0, 0, 128, 15, SSD1306_BLACK);
display.fillRect(0, 16, 128, 31, SSD1306_BLACK);
display.fillRect(0, 32, 128, 47, SSD1306_BLACK);
display.fillRect(0, 48, 128, 64, SSD1306_BLACK);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println("SHOW TIME");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 16);
display.println("SHOW DATA");
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 32);
display.println("TEMP");
display.display();
show74595(0);
byte FF[4];
FF[0] = 0xA3;
Serial.write(FF, 3);
flag6++;
}
if (S4 == LOW)
{
byte OO[4];
OO[0] = 0xA5;
Serial.write(OO, 3);
display.clearDisplay();
display.display();
delay(50);
}
if (S4 == LOW)
{
byte OO[4];
OO[0] = 0xA5;
Serial.write(OO, 3);
display.clearDisplay();
display.display();
delay(50);
}
if (flag4 == 6)
{
password[1] = char(EEPROM.read(0));
password[2] = char(EEPROM.read(1));
password[3] = char(EEPROM.read(2));
if (password[1] == (JJ[0]+48) && password[2] == (JJ[1]+48) && password[3] == (JJ[2]+48) )
{
byte OP[2];
OP[0] = 0xA6;
Serial.write(OP, 3);
show74595(8);
display.clearDisplay();
display.setCursor(5, 30);
display.print(JJ[0]);
display.setCursor(20, 30);
display.print(JJ[1]);
display.setCursor(36, 30);
display.print(JJ[2]);
for (int i = 15; i <= 18; i++)
{
display.drawLine(i, 64, i, 64 - JJ[0] * 7, WHITE);
}
for (int j = 30; j <= 33; j++)
{
display.drawLine(j, 64, j, 64 - JJ[1] * 7, WHITE);
}
for (int k = 45; k <= 48; k++)
{
display.drawLine(k, 64, k, 64 - JJ[2] * 7, WHITE);
}
display.display();
}
else //if (password[1] != (JJ[0]+48) || password[2] != (JJ[1]+48) || password[3] != (JJ[2]+48) )
{
display.setTextSize(2);
display.clearDisplay();
display.setCursor(5, 30);
display.print("ERROR");
display.display();
byte OL[2];
OL[0] = 0xA7;
Serial.write(OL, 3);
show74595(0);
}
flag4=8; //只判斷一次
}
if (flag3 == 1) // 記憶密碼
{
EEPROM.write(0, my_str[0]);
EEPROM.write(1, my_str[1]);
EEPROM.write(2, my_str[2]);
}
// if (flag1 == 7) // 輸出密碼
// {
// password[0] = 0xB5;
// password[1] = char(EEPROM.read(0));
// password[2] = char(EEPROM.read(1));
// password[3] = char(EEPROM.read(2));
// Serial.write(password, 5);
// password[0] = 0xB5;
// password[1] = char(EEPROM.read(0));
// password[2] = char(EEPROM.read(1));
// password[3] = char(EEPROM.read(2));
// Serial.write(password, 5);
// flag1 = 0;
// }
}*/
}
void show74595(int a)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, a);
digitalWrite(latchPin, HIGH);
}
void Bshow74595(int a) // 左到右
{
int A = 0;
for (int i = 0; i < 8; i++)
{
A |= ((a >> i) & 0x01) << (7 - i);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, A);
digitalWrite(latchPin, HIGH);
}
void showOLED(int a, int b, byte c)
{
display.setCursor(a, b);
display.println(c);
}
// void rtctime() // 顯示星期日期時間溫度
// {
// display.clearDisplay();
// display.setTextColor(2);
// DateTime now = rtc.now();
// display.setCursor(0, 0);
// display.println(daysOfWeek[now.dayOfTheWeek()]); // 顯示星期幾
// display.setCursor(0, 10);
// display.print(now.year(), DEC);
// display.print('/');
// display.print(now.month(), DEC);
// display.print('/');
// display.print(now.day(), DEC);
// display.setCursor(0, 20);
// display.print(now.hour(), DEC); // 以 10进制显示 时
// display.print(':');
// display.print(now.minute(), DEC); // 以 10进制显示 分
// display.print(':');
// display.print(now.second(), DEC); // 以 10进制显示 秒
// display.setCursor(0, 30);
// display.print(rtc.getTemperature(), 1); // 溫度顯示小數點後1位
// display.display();
// delay(100);
// }
void change() // 轉換數值
{
temp1 = (int)dd[0];
temp2 = (int)dd[1];
temp3 = (int)dd[2];
temp4 = (int)dd[3];
y = temp1 * 1000 + temp2 * 100 + temp3 * 10 + temp4;
// now month
temp1 = (int)dd[4];
temp2 = (int)dd[5];
m = temp1 * 10 + temp2;
// now date
temp1 = (int)dd[6];
temp2 = (int)dd[7];
d = temp1 * 10 + temp2;
// now Day of Week
// dOW = (int)inString[6] - 48;
// now hour
temp1 = (int)tt[0];
temp2 = (int)tt[1];
h = temp1 * 10 + temp2;
// now minute
temp1 = (int)tt[2];
temp2 = (int)tt[3];
mi = temp1 * 10 + temp2;
// now second
temp1 = (int)tt[4];
temp2 = (int)tt[5];
s = temp1 * 10 + temp2;
}