/* Uporaba knjiznice BOUNCE2.h*/
#include <Bounce2.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,7,6); // RS E D4..D7

#define btnGreen 3
#define btnRed 4
#define btnYellow 5

int stevec = 0; 
Bounce2::Button tipka1,tipka2, tipka3 = Bounce2::Button();

void setup(){
  tipka1.attach(btnGreen, INPUT_PULLUP);
  tipka2.attach(btnRed, INPUT_PULLUP);
  tipka3.attach(btnYellow, INPUT_PULLUP);
  tipka1.interval(10);
  tipka2.interval(10);
  tipka3.interval(10);
  tipka1.setPressedState(LOW);
  tipka2.setPressedState(LOW);                  
  tipka3.setPressedState(LOW);                   
  Serial.begin(115200);
  lcd.begin(16,2);
}
void loop(){ 
  tipka1.update();
  tipka2.update();
  tipka3.update();

  if(tipka1.pressed()){ 
    stevec++;
    Serial.println(stevec);
  }
  if(tipka2.pressed()){
    stevec--;
    Serial.println(stevec);
  }
  if(tipka3.pressed()){
    stevec = 0;
    Serial.println(stevec);
  }

  if(tipka3.pressed() || tipka2.pressed() || tipka1.pressed()){
    lcd.clear();
  }

  lcd.setCursor(0,0);
  lcd.print(stevec);
}




/* Primer uporabe zunanje prekinitve 
#define tipka 2
#define ledPin 8

unsigned long zadnjiOdboj = 0;
int zakasnitevOdboja = 200;
int stevec; 

volatile bool stanje = LOW;
void setup(){
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  pinMode(tipka, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(tipka),ISR_tipka, FALLING);
}
void loop(){
  digitalWrite(ledPin, stanje);
}
void ISR_tipka(){ 
  if((millis() - zadnjiOdboj) > zakasnitevOdboja){
    stanje = !stanje;
    zadnjiOdboj = millis();
    stevec++;
    Serial.println(stevec);
  }
  
}
*/






/*preprecitev odskakovanja kontaktov s funkcijo millis()
#define tipka 4
bool zadnjeStanje = HIGH;
int stevec;
unsigned long zadnjiOdboj = 0;
int zakasnitevOdboja = 200;

void setup(){ 
  Serial.begin(115200);
  pinMode(tipka, INPUT_PULLUP);
}
void loop(){
  bool stanje = digitalRead(tipka);
  if(stanje != zadnjeStanje && (millis()-zadnjiOdboj) > zakasnitevOdboja){ 
    zadnjiOdboj = millis();
    zadnjeStanje = stanje;
    if(zadnjeStanje == HIGH){
      stevec++;
      Serial.println(stevec);
    }
  }
}
*/




/* stevec odskakovanja kontaktov
#define tipka 4
int stevec;
bool zadnjeStanje = HIGH;
void setup() {
  Serial.begin(115200);
  pinMode(tipka, INPUT_PULLUP);
}

void loop() {
  bool stanje = digitalRead(tipka);
  if(zadnjeStanje != stanje){ 
    stevec++;
    zadnjeStanje = stanje;
    Serial.println(stevec);
  }
}
*/