#include<LCD_I2C.h>
#define BUTTON(n) n+2
#define LED 7
LCD_I2C lcd(0x27,20,4);
int variable[]={0,0,0,0,0};
unsigned long long last[3];
char prestate[]={0,0,0,0,0},state[]={0,0,0,0,0},isToggled=0,delay0=100,times=0;
void setup(){
pinMode(BUTTON(0),INPUT_PULLUP),
pinMode(BUTTON(1),INPUT_PULLUP),
pinMode(BUTTON(2),INPUT_PULLUP),
pinMode(BUTTON(3),INPUT_PULLUP),
pinMode(BUTTON(4),INPUT_PULLUP),
pinMode(LED,OUTPUT),
lcd.begin(),
lcd.backlight();
return;
}
void loop(){
state[0]=!digitalRead(BUTTON(0));
if(!prestate[0]&&state[0])
variable[0]++;
prestate[0]=state[0],
state[1]=!digitalRead(BUTTON(1));
if(!prestate[1]&&state[1])
last[0]=millis(),
isToggled=1;
else if(prestate[1]&&!state[1]&&isToggled)
isToggled=0,
variable[1]++;
else if(prestate[1]&&state[1]&&isToggled&&millis()-last[0]>=3000)
isToggled=0,
variable[1]--;
else if(!state[1])
isToggled=0;
prestate[1]=state[1],
state[2]=!digitalRead(BUTTON(2));
if(!prestate[2]&&state[2])
last[1]=millis();
else if(prestate[2]&&state[2]&&millis()-last[1]>=delay0)
last[1]=millis(),
variable[2]++,
delay0-=delay0?1:0;
else if(!state[2])
delay0=100;
prestate[2]=state[2],
state[3]=!digitalRead(BUTTON(3));
if(!prestate[3]&&state[3])
variable[3]=!variable[3],
digitalWrite(LED,variable[3]);
prestate[3]=state[3],
state[4]=!digitalRead(BUTTON(4));
if(!prestate[4]&&state[4]&&!times)
last[2]=millis(),
times++;
else if(times&&prestate[4]!=state[4]&&millis()-last[2]<250){
if(times>2)
variable[4]--,
times=0;
else
last[2]=millis(),
times++;
}else if(times&&millis()-last[2]>=250)
variable[4]++,
times=0;
prestate[4]=state[4],
lcd.clear(),
lcd.print(variable[0]),
lcd.setCursor(0,1),
lcd.print(variable[1]),
lcd.setCursor(0,2),
lcd.print(variable[2]),
lcd.setCursor(0,3),
lcd.print(variable[4]);
return;
}