#include <TimerOne.h>
#include <ezButton.h>
#include <TM1637.h>
const int CLK = 2;
const int DIO = 3;
TM1637 DISP;
#include <ArduinoTrace.h>
unsigned long int clocktime1,clocktime2;
unsigned char hour = 7;
unsigned char minute = 15;
unsigned int t1,t2;
ezButton timeSetBtn(5); // create ezButton object that attach to pin 5;
ezButton hourBtn(6); // create ezButton object that attach to pin 6;
ezButton minuteBtn(7); // create ezButton object that attach to pin 7;
void setup()
{
Serial.begin(115200);
timeSetBtn.setDebounceTime(50); // set debounce time to 50 milliseconds
hourBtn.setDebounceTime(50);
minuteBtn.setDebounceTime(50);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
DISP.begin(CLK, DIO, 4); // clockpin, datapin, #digits
DISP.displayClear();
DISP.setBrightness(7); // full brightness, default is 3
}
unsigned long pm1;
unsigned long pm2;
void loop()
{
t1=millis();
timeSetBtn.loop();
hourBtn.loop();
minuteBtn.loop();
incrementHours();
incrementMinute();
clock();
DISP.displayTime(hour,minute,1);
//DUMP(hour);
//DUMP(minute);
if (minute==60){
hour++;
}
hour%=24;
minute%=60;
t2=millis();
//DUMP(t2-t1);
delay(10);
}
void incrementHours()
{
enum {s0,s1,s2,s3};
static int state=s0;
switch(state)
{
case s0:
if(timeSetBtn.getState()==LOW)
{
state=s1;
}
break;
case s1:
if(hourBtn.getState()==LOW && timeSetBtn.getState()==LOW)
{
hour++;
pm1=millis();
state=s2;
}
else
{
state=s0;
}
break;
case s2:
if(hourBtn.getState()==LOW && timeSetBtn.getState()==LOW)
{
if((millis()-pm1)>800)
{
pm1=millis();
state=s3;
}
}
else
{
state=s0;
}
break;
case s3:
if(hourBtn.getState()==LOW && timeSetBtn.getState()==LOW)
{
if((millis()-pm1)>250)
{
pm1=millis();
hour++;
}
}
else
{
state=s0;
}
break;
}
}
void incrementMinute()
{
enum {s0,s1,s2,s3};
static int state=s0;
switch(state)
{
case s0:
if(timeSetBtn.getState()==LOW)
{
state=s1;
}
break;
case s1:
if(minuteBtn.getState()==LOW && timeSetBtn.getState()==LOW)
{
minute++;
pm2=millis();
state=s2;
}
else
{
state=s0;
}
break;
case s2:
if(minuteBtn.getState()==LOW && timeSetBtn.getState()==LOW)
{
if((millis()-pm2)>800)
{
pm2=millis();
state=s3;
}
}
else
{
state=s0;
}
break;
case s3:
if(minuteBtn.getState()==LOW && timeSetBtn.getState()==LOW)
{
if((millis()-pm2)>250)
{
pm2=millis();
minute++;
}
}
else
{
state=s0;
}
break;
}
}
void clock(){
DUMP(millis()-clocktime1);
if (millis()-clocktime1>60000){
minute++;
clocktime1=millis();
}
}