#include <LiquidCrystal.h> //Libraries
#include <EEPROM.h>
#include <Arduino.h>
#include <TM1637Display.h>
const uint8_t SEG_DONE[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
const uint8_t SEG_PROG[] = {
SEG_A | SEG_B | SEG_E | SEG_F | SEG_G, // P
SEG_E | SEG_G, // R
SEG_C | SEG_D | SEG_E | SEG_G, // O
SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G // G
};
const uint8_t SEG_HI[] = {
SEG_G, //
SEG_B | SEG_C | SEG_E | SEG_F | SEG_G, // H // R
SEG_F | SEG_E , // I
SEG_G // .
};
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
//display.setSegments(SEG_DONE);
LiquidCrystal lcd(12,11,10,9,8,7); //Arduino pins to lcd
#define bt_up A0
#define bt_down A1
#define bt_reset A2
#define break_reset A5
#define buzzer 13
#define set_but A4
#define save_but A3
long d1=0, d2=0, d3=0, d4=0,s1=0,s2=0,s3=0,S1=0,S2=0,S3=0;
int mode = 0;
int flag1=0, flag2=0, timer=0;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
void setup(){
display.setBrightness(0x0f);//MAX - 0x0f
S1=EEPROM.read(10);
S2=EEPROM.read(9);
S3=EEPROM.read(8);
s1=EEPROM.read(5);
s2=EEPROM.read(6);
s3=EEPROM.read(7);
if(S1==0 && S2==0 && S3 ==0){S1=s1;S2=s2;S3=s3;}
pinMode(bt_up, INPUT_PULLUP);
pinMode(bt_down, INPUT_PULLUP);
pinMode(bt_reset, INPUT_PULLUP);
pinMode(set_but, INPUT_PULLUP);
pinMode(save_but, INPUT_PULLUP);
pinMode(break_reset, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
lcd.begin(16, 2); // Configura lcd numero columnas y filas
lcd.clear();
lcd.setCursor (0,0);
lcd.print(" Welcome To ");
lcd.setCursor (0,1);
lcd.print("Digital Counter");
delay(2000);
lcd.clear();
if(EEPROM.read(50)==0){
}else{WriteEeprom();}
EEPROM.write(50,0);
ReadEeprom();
lcd.clear();
lcd.setCursor (0,1);
lcd.print("break =");
lcd.setCursor (8,1);
lcd.print(s1);
lcd.setCursor (9,1);
lcd.print(s2);
lcd.setCursor (10,1);
lcd.print(s3);
data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(0);
data[2] = display.encodeDigit(0);
data[3] = display.encodeDigit(0);
display.setSegments(SEG_HI);
delay(3000);
lcd.clear();
}
void loop()
{
break_reset_loop();
data[0]=display.encodeDigit(d4);
display.setSegments(data);
data[1]=display.encodeDigit(d3);
display.setSegments(data);
data[2]=display.encodeDigit(d2);
display.setSegments(data);
data[3]=display.encodeDigit(d1);
display.setSegments(data);
break_set ();
if(digitalRead (bt_up) == 0){
if(flag1==0){ flag1=1;
d1=d1+1;
if(d1>9){d1=0; d2=d2+1;}
if(d2>9){d2=0; d3=d3+1;}
if(d3>9){d3=0; d4=d4+1;}
if(d4>9){d4=0;}
S3=S3-1;
if(S3<0){S3=9; S2=S2-1;}
if(S2<0){S2=9; S1=S1-1;}
if(S1<0){S1=0;}
write_break();
if(S1==0 && S2==0 && S3==0)
{
digitalWrite(buzzer, HIGH);
S1=EEPROM.read(5);
S2=EEPROM.read(6);
S3=EEPROM.read(7);
delay(2000);
digitalWrite(buzzer, LOW);
}
WriteEeprom();
}
}else{flag1=0;}
if(digitalRead (bt_down) == 0){
if(flag2==0){ flag2=1;
d1=d1-1;
if(d1<0){d1=9; d2=d2-1;}
if(d2<0){d2=9; d3=d3-1;}
if(d3<0){d3=9; d4=d4-1;}
if(d4<0){d4=9;}
WriteEeprom();
}
}else{flag2=0;}
if(digitalRead (bt_reset) == 0){
digitalWrite(buzzer, HIGH);
if(timer<100){timer=timer+1;}
if(timer==100){
d1=0, d2=0, d3=0, d4=0;
WriteEeprom();
digitalWrite(buzzer, LOW); delay(1000);
}
}else{digitalWrite(buzzer, LOW); timer=0;}
lcd.setCursor (0,0);
lcd.print("Digital Counter");
lcd.setCursor(4,1);
lcd.print(d4);
lcd.print(d3);
lcd.print(d2);
lcd.print(d1);
lcd.setCursor(10,1);
lcd.print(S1);
lcd.print(S2);
lcd.print(S3);
delay(10);
}
void ReadEeprom() {
d1=EEPROM.read(1);
d2=EEPROM.read(2);
d3=EEPROM.read(3);
d4=EEPROM.read(4);
}
void WriteEeprom() {
EEPROM.write(1, d1);
EEPROM.write(2, d2);
EEPROM.write(3, d3);
EEPROM.write(4, d4);
}
void break_set ()
{
while(digitalRead (set_but) == 0 )
{ if(mode == 0){s1=0;s2=0;s3=0;S1=0;S2=0;S3=0;mode=1;}
while(mode == 1){
display.setSegments(SEG_PROG);
lcd.setCursor (0,0);
lcd.print("Break Set Mode");
lcd.setCursor (0,1);
lcd.print("digit 1 = ");
lcd.setCursor (11,1);
if(digitalRead (bt_up) == 0){
delay(100);
s1++;
if(s1>9){s1=0;}
lcd.print(s1);}
delay(100);
if(digitalRead(save_but) == 0){
EEPROM.write(5, s1);
delay(100);
lcd.setCursor (0,1);
lcd.print("saved successfully ");
delay(2000);
lcd.clear();
mode = 2;}}
while(mode == 2){
display.setSegments(SEG_PROG);
lcd.setCursor (0,0);
lcd.print("Break Set Mode");
lcd.setCursor (0,1);
lcd.print("digit 2 = ");
lcd.setCursor (11,1);
if(digitalRead (bt_up) == 0){
delay(100);
s2++;
if(s2>9){s2=0;}
lcd.print(s2);}
delay(100);
if(digitalRead(save_but) == 0){
EEPROM.write(6, s2);
delay(100);
lcd.setCursor (0,1);
lcd.print("saved successfully ");
delay(2000);
mode = 3;
lcd.clear();}}
while(mode == 3){
display.setSegments(SEG_PROG);
lcd.setCursor (0,0);
lcd.print("Break Set Mode");
lcd.setCursor (0,1);
lcd.print("digit 3 = ");
lcd.setCursor (11,1);
if(digitalRead (bt_up) == 0){
delay(100);
s3++;
if(s3>9){s3=0;}
lcd.print(s3);}
delay(100);
if(digitalRead(save_but) == 0){
EEPROM.write(7, s3);
delay(100);
lcd.setCursor (0,1);
lcd.print("saved successfully ");
delay(2000);
mode = 4;
lcd.clear();}}
while(mode == 4 && digitalRead (set_but) == 0){ lcd.setCursor (0,0);
lcd.print("chang to runmode");S1=s1;S2=s2;S3=s3;write_break();delay(100);display.setSegments( SEG_DONE);}
}}
void write_break()
{
EEPROM.write(8,S3);
EEPROM.write(9,S2);
EEPROM.write(10,S1);
}
void break_reset_loop()
{
if(digitalRead(break_reset)==LOW)
{
S1=s1;
S2=s2;
S3=s3;
write_break();
}
}