#include <TM1637Display.h> // 4-Dig LED Disp
#include <Wire.h>
#include "RTClib.h"
#define BUZZER 7
#define BUTTON 8
#define FOURDIG_LED_CLK 2
#define FOURDIG_LED_DAT 3
RTC_DS1307 rtc;
TM1637Display led4d(FOURDIG_LED_CLK, FOURDIG_LED_DAT);
int last = 0;
bool isLedPower = true;
uint8_t dataLed[] = { 0,0,0,0 };
void beep1() {
digitalWrite(BUZZER, HIGH);
delayMicroseconds(1);
digitalWrite(BUZZER, LOW);
}
void beep2() {
digitalWrite(BUZZER, HIGH);
delay(10);
digitalWrite(BUZZER, LOW);
}
void beep3() {
for (int i = 0; i < 3; i++) {
digitalWrite(BUZZER, HIGH);
delay(3);
digitalWrite(BUZZER, LOW);
delay(80);
}
}
void beep4(int kai) {
for (int i = 0; i < kai; i++) {
digitalWrite(BUZZER, HIGH);
delay(10);
digitalWrite(BUZZER, LOW);
delay(200);
}
}
void setup() {
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();
pinMode(BUTTON, INPUT);
pinMode(BUZZER, OUTPUT);
led4d.setBrightness(0x0a);
beep3();
}
void loop() {
if (! rtc.isrunning()) {
led4d.showNumberDec(8888, false, 4, 0);
beep2();
delay(1000);
return;
}
DateTime now = rtc.now();
if (digitalRead(BUTTON)) {
beep2();
if (isLedPower) {
for(int i=0; i<4; i++)
dataLed[i] = 0;
led4d.setSegments(dataLed);
isLedPower = false;
} else {
isLedPower = true;
}
delay(500);
}
int nhour = now.hour();
int nmin = now.minute();
int counter = nhour * 100 + nmin;
int nsec = now.second();
if (last != nsec) {
if(nsec == 0) {
if(nmin == 0) {
int kai = nhour % 6;
if(kai == 0)
kai = 6;
beep4(kai);
}
}
last = nsec;
beep1();
if (isLedPower) {
int num = counter;
dataLed[3] = led4d.encodeDigit(num % 10);
if (num > 10)
dataLed[2] = led4d.encodeDigit((num / 10) % 10);
if (num > 100)
dataLed[1] = led4d.encodeDigit((num / 100) % 10);
if (num > 1000)
dataLed[0] = led4d.encodeDigit((num / 1000) % 10);
else
dataLed[0] = led4d.encodeDigit(0);
if ((nsec % 2) == 0)
dataLed[1] ^= 0b10000000;
led4d.setSegments(dataLed);
}
}
delay(50);
}