// števec 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);
  }
}*/

/*
//  preprečetitev 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);
    }
  }
}
*/


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

volatile bool stanje = LOW;      // volatile = program pogleda v RAM stanje spremenljivke ne pa v predpmnilnik

void setup() {
  Serial.begin(115200);
  pinMode(tipka, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(tipka), ISR_tipka, CHANGE);
}

void loop() {
  digitalWrite(ledPin, stanje);
}

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

/*
// Primer uporabe zunanje prekinitve z upoarbo millis()  
#define ledPin 8
#define tipka 2
unsigned long zadnjiOdboj = 0;
int zakasnitevOdboja = 200;
int stevec, counter;

volatile bool stanje = LOW;      // volatile = program pogleda v RAM stanje spremenljivke ne pa v predpmnilnik

void setup() {
  Serial.begin(115200);
  pinMode(tipka, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(tipka), ISR_tipka, CHANGE);
}

void loop() {
  digitalWrite(ledPin, stanje);
}

void ISR_tipka() {
  if ((millis() - zadnjiOdboj) > zakasnitevOdboja) {
    stanje = !stanje;
    zadnjiOdboj = millis();
    stevec++;
    Serial.print("Števec: ");Serial.println(stevec);
  }
  counter++;
  Serial.print("Counter: ");Serial.println(counter);
}
*/

/*
//  Uporaba knjižnice Bounce2.h  
#include <Bounce2.h>
#define BUTTON_GREEN_PIN 4
#define BUTTON_RED_PIN 3

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

void setup() {
  tipka1.attach( BUTTON_GREEN_PIN, INPUT_PULLUP);
  tipka2.attach( BUTTON_RED_PIN, 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);
  }
}
*/


/*  
tipka1 = stevec ++
tipka2 = stevec --
tipka3 = stevec 0
tipka4 = zunanji interupt + millis()
LCD display = prikazuje stevec
*/
/*
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7); 

#include <Bounce2.h>
#define ledPin 13
#define BUTTON_BLUE_PIN 3
#define BUTTON_GREEN_PIN 5
#define BUTTON_RED_PIN 4
#define BUTTON_BLACK_PIN 6

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

volatile bool stanje = LOW;      // volatile = program pogleda v RAM stanje spremenljivke ne pa v predpmnilnik

Bounce2::Button tipka1, tipka2, tipka3 = Bounce2::Button();

void setup() {
  Serial.begin(115200);
  pinMode(BUTTON_BLUE_PIN, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

  attachInterrupt(digitalPinToInterrupt(BUTTON_BLUE_PIN), ISR_tipka, CHANGE);

  tipka1.attach( BUTTON_GREEN_PIN, INPUT_PULLUP);
  tipka2.attach( BUTTON_RED_PIN, INPUT_PULLUP);
  tipka3.attach( BUTTON_BLACK_PIN, INPUT_PULLUP);

  tipka1.interval(10);
  tipka2.interval(10);
  tipka3.interval(10);

  tipka1.setPressedState(LOW);
  tipka2.setPressedState(LOW);
  tipka3.setPressedState(LOW);
}

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);
  }

  digitalWrite(ledPin, stanje);
}

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


// prejšnja + LCD + millis()
#include <Bounce2.h>
#include <LiquidCrystal.h>

#include <Bounce2.h>
#define ledPin 13
#define BUTTON_BLUE_PIN 3
#define BUTTON_GREEN_PIN 5
#define BUTTON_RED_PIN 4
#define BUTTON_BLACK_PIN 6

LiquidCrystal lcd(13, 12, 11, 10, 8, 7);

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

volatile bool stanje = LOW;

Bounce2::Button tipka1, tipka2, tipka3 = Bounce2::Button();


void setup() {
  Serial.begin(115200);
  pinMode(BUTTON_BLUE_PIN, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

  attachInterrupt(digitalPinToInterrupt(BUTTON_BLUE_PIN), ISR_tipka, CHANGE);

  tipka1.attach( BUTTON_GREEN_PIN, INPUT_PULLUP);
  tipka2.attach( BUTTON_RED_PIN, INPUT_PULLUP);
  tipka3.attach( BUTTON_BLACK_PIN, INPUT_PULLUP);

  tipka1.interval(10);
  tipka2.interval(10);
  tipka3.interval(10);

  tipka1.setPressedState(LOW);
  tipka2.setPressedState(LOW);
  tipka3.setPressedState(LOW);

  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);
  }

  digitalWrite(ledPin, stanje);
  
  lcd.setCursor(0, 0);
  lcd.print("Stevec: ");
  lcd.print(stevec);
   
  lcd.setCursor(0,1);
  if(stanje == HIGH){
    lcd.print("Led ON");
  }
  else{
    lcd.print("Led OF");
  }
}

void ISR_tipka(){
  if((millis() - zadnjiOdboj) > zakasnitevOdboja){
    stanje = !stanje;
    zadnjiOdboj = millis();
  }
    
}

/*
#include <Bounce2.h>
#include <LiquidCrystal.h>

#define btnGreen 2
#define btnRed 4
#define btnBlue 5
#define btnBlack 3
#define ledPin 9


LiquidCrystal lcd(13, 12, 11, 10, 8, 7);

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

volatile bool stanje = LOW;

Bounce2::Button tipka1, tipka2, tipka3 = Bounce2::Button();


void setup() {
  Serial.begin(115200);
  tipka1.attach(btnGreen, INPUT_PULLUP);
  tipka2.attach(btnRed, INPUT_PULLUP);
  tipka3.attach(btnBlue, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  pinMode(btnBlack, INPUT_PULLUP);

  tipka1.interval(10);
  tipka2.interval(10);
  tipka3.interval(10);

  tipka1.setPressedState(LOW);
  tipka2.setPressedState(LOW);
  tipka3.setPressedState(LOW);

  attachInterrupt(digitalPinToInterrupt(btnBlack), ISR_tipka, FALLING);

  lcd.begin(16, 2);
}

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

  if (tipka1.pressed()) {
    lcd.clear();
    stevec++;
    Serial.println(stevec);
  }
  if (tipka2.pressed()) {
    stevec--;
    Serial.println(stevec);
  }
  if (tipka3.pressed()) {
    lcd.clear();
    stevec = 0;
    Serial.println(stevec);
  }
  digitalWrite(ledPin, stanje);
  
  lcd.setCursor(0, 0);
  lcd.print("Stevec: ");
  lcd.print(stevec);
   
  lcd.setCursor(0,1);
  if(stanje == HIGH){
    lcd.print("Led ON");
  }
  else{
    lcd.print("Led OF");
  }
}

void ISR_tipka(){
  if((millis() - zadnjiOdboj) > zakasnitevOdboja){
    stanje = !stanje;
    zadnjiOdboj = millis();
  }
}*/
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led1:A
led1:C
r1:1
r1:2
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
lcd1:VSS
lcd1:VDD
lcd1:V0
lcd1:RS
lcd1:RW
lcd1:E
lcd1:D0
lcd1:D1
lcd1:D2
lcd1:D3
lcd1:D4
lcd1:D5
lcd1:D6
lcd1:D7
lcd1:A
lcd1:K
r2:1
r2:2