/* števec odskakovanja kontatov
#define tipka 4
int stevec;
bool zadnje_stanje=HIGH;

void setup() {
  Serial.begin(115200);
  pinMode(tipka,INPUT_PULLUP);

}

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

}
*/

/* -----------------------------------------------------------------------------------------------------*/

/* preprečitev odskakovanja kontatov s millis()
#define tipka 4
int stevec;
bool zadnje_stanje=HIGH;
unsigned long zadnji_odboj = 0;
int zakasnitev_odboja=200;

void setup() {
  Serial.begin(115200);
  pinMode(tipka,INPUT_PULLUP);

}

void loop() {
  bool stanje = digitalRead(tipka);
  if(zadnje_stanje != stanje && (millis()-zadnji_odboj)>zakasnitev_odboja){
    zadnji_odboj=millis();
    zadnje_stanje = stanje;
    if(zadnje_stanje = HIGH){
      stevec++;
      Serial.println(stevec);
    }
  }

}
*/

/* -----------------------------------------------------------------------------------------------------*/

/* uporaba zunanje prekinitve
#define tipka 2
#define led 8
volatile bool stanje= LOW;

void setup() {
  pinMode(tipka,INPUT_PULLUP);
  pinMode(led,OUTPUT);
  attachInterrupt(digitalPinToInterrupt(tipka),ISR_tipka, FALLING);

}

void loop() {
  digitalWrite(led,stanje);

}

void ISR_tipka(){
  stanje = !stanje;
}
*/

/* -----------------------------------------------------------------------------------------------------*/

/*zunanje prekinitev + preprečevanje odskakovanja kontaktov*/
#define tipka 2
#define led 6
volatile bool stanje= LOW;
unsigned long zadnji_odboj = 0;
int zakasnitev_odboja=200;
int stevec,counter;

void setup() {
  Serial.begin(115200);
  pinMode(tipka,INPUT_PULLUP);
  pinMode(led,OUTPUT);
  attachInterrupt(digitalPinToInterrupt(tipka),ISR_tipka, FALLING);

}

void loop() {
  digitalWrite(led,stanje);

}

void ISR_tipka(){
  if((millis()-zadnji_odboj)>zakasnitev_odboja){
    stanje = !stanje;
    zadnji_odboj=millis();
    stevec++;
    Serial.print("Števec:");Serial.println(stevec);
    

  }
  counter++;
  Serial.print("counter:");Serial.println(counter);
}


/* -----------------------------------------------------------------------------------------------------*/

/* uporaba knjižnice bounce2.h
#include <Bounce2.h>
#define tipkaz 3
#define tipkar 4

int stevec;
Bounce2:: Button tipka1, tipka2 = Bounce2::Button();
void setup() {
  tipka1.attach(tipkaz, INPUT_PULLUP);
  tipka2.attach(tipkar, INPUT_PULLUP);
  tipka1.interval(10);
  tipka2.interval(10);
  tipka1.setPressedState(LOW);
  tipka2.setPressedState(LOW);
  Serial.begin(115200);
}

void loop() {
  tipka1.update();
  tipka2.update();

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

*/

/*
#include <Bounce2.h>
#include <LiquidCrystal.h>
#define tipkaz 3
#define tipkar 4
#define tipkam 5
#define tipkab 2
#define led 6
volatile bool stanje= LOW;
unsigned long zadnji_odboj = 0;
int zakasnitev_odboja=200;
LiquidCrystal lcd(12,11,10,9,8,7);


int stevec;
Bounce2:: Button tipka1, tipka2, tipka3 = Bounce2::Button();
void setup() {
  tipka1.attach(tipkaz, INPUT_PULLUP);
  tipka2.attach(tipkar, INPUT_PULLUP);
  tipka3.attach(tipkam, INPUT_PULLUP);
  tipka1.interval(10);
  tipka2.interval(10);
  tipka3.interval(10);
  tipka1.setPressedState(LOW);
  tipka2.setPressedState(LOW);
  tipka3.setPressedState(LOW);
  Serial.begin(115200);
  pinMode(led,OUTPUT);
  pinMode(tipkab,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(tipkab),ISR_tipka, FALLING);
  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);
  }
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("Stevec: ");
  lcd.setCursor(10,1);
  lcd.print(stevec);
  lcd.setCursor(0,0);
  lcd.print("LED:");
  lcd.setCursor(10,0);
  if(stanje== LOW){
    lcd.print("OFF");
  }
  if(stanje== HIGH){
    
    lcd.print("ON ");
  }
  digitalWrite(led,stanje);

}


void ISR_tipka(){
  if((millis()-zadnji_odboj)>zakasnitev_odboja){
    stanje = !stanje;
    zadnji_odboj=millis();
  }
}*/