#include <EEPROM.h>
int enderecoTempoTotal = 0;
int enderecoQuantidadeCred = 10;
volatile bool lerEeprom = false;
#include <LiquidCrystal_I2C.h>
#define i2c_endereco_lcd1 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 10
LiquidCrystal_I2C lcd(i2c_endereco_lcd1, LCD_COLUMNS, LCD_LINES);
volatile byte timer1 = 0;
volatile byte timer2 = 0;
volatile byte pulso = 0;
volatile bool ligado = false;
const long interval = 50; //alterar para 60000 para contar minutos;
volatile long tIni = 0;
volatile long tFim = 0;
volatile unsigned int minutosParcial = 0;
volatile unsigned int minutosTotal = 0;
volatile bool limparDisplayTime1 = false;
volatile bool atualizarDisplayCred = false;
#define TEMPO_DEBOUNCE 100 //ms
volatile unsigned long timestamp_ultimo_acionamento = 0;
void setup(){
EEPROM.put(enderecoTempoTotal, minutosTotal);
EEPROM.put(enderecoQuantidadeCred, cred);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
attachInterrupt(digitalPinToInterrupt(2),botao1,RISING);
attachInterrupt(digitalPinToInterrupt(3),botao2,RISING);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("TEMP CRED");
lcd.setCursor(2, 1);
lcd.print(timer1);
lcd.setCursor(0,1);
lcd.print("mp");
lcd.setCursor(9,1);
lcd.print(timer2);
lcd.setCursor(7,1);
lcd.print("mt");
lcd.setCursor(15,0);
lcd.print(cred);
lcd.setCursor(15,1);
lcd.print("*");
}
void loop(){
if(ligado){
if(lerEeprom){
EEPROM.get(enderecoTempoTotal, minutosTotal);
EEPROM.get(enderecoQuantidadeCred, cred);
lerEeprom = false;
}
tFim = millis();
if(tFim - tIni >= interval){
tIni = tFim;
timer1++;
timer2++;
if(timer1 == 60){
timer1 = 0;
minutosParcial++;
}
if(timer2 == 60){
timer2 = 0;
minutosTotal++;
}
lcd.setCursor(2, 1);
lcd.print(minutosParcial);
lcd.setCursor(9,1);
lcd.print(minutosTotal);
}
if(atualizarDisplayCred){
lcd.setCursor(10, 0);
lcd.print(Cred);
atualizarDisplayCred = false;
lcd.setCursor(15,1);
lcd.print(">");
}
delay(995);
} else if(limparDisplayTime1){
lcd.setCursor(2, 1);
lcd.print("0 ");
limparDisplayTime1 = false;
lcd.setCursor(15,1);
lcd.print("*");
}
}
void botao1(){
if ( (millis() - timestamp_ultimo_acionamento) >= TEMPO_DEBOUNCE ){
timestamp_ultimo_acionamento = millis();
if (!ligado){
digitalWrite(4, LOW);
timer1=0;
ligado=true;
pulso++;
EEPROM.put(enderecoQuantidadeCred, cred);
atualizarDisplayPulso = true;
}
}
}
void botao2(){
if ( (millis() - timestamp_ultimo_acionamento) >= TEMPO_DEBOUNCE ){
timestamp_ultimo_acionamento = millis();
digitalWrite(4, HIGH);
timer1=0;
ligado=false;
minutosParcial = 0;
limparDisplayTime1 = true;
EEPROM.put(enderecoTempoTotal, minutosTotal);
EEPROM.put(enderecoQuantidadeCred, cred);
lerEeprom = true;
}
}