#define set0(r,b) r &= ~(1<<b)
#define set1(r,b) r |= 1<<b
#define test(r,b) (r&(1<<b))
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
bool pole[] = {true, true, true, true};
int riadok;
void setup() {
lcd.begin(20,4);
for(int i = 4; i < 8; i++){
set0(DDRD, i);
set1(PORTD, i);
}
set1(SREG, 7);
set1(PCICR, PCIE2);
set1(PCMSK2, PCINT23);
set1(PCMSK2, PCINT22);
set1(PCMSK2, PCINT21);
set1(PCMSK2, PCINT20);
vypis_start();
}
void loop() {
// put your main code here, to run repeatedly:
}
void vypis_start(){
lcd.setCursor(0,0);
lcd.print("1.komora zatvorena");
lcd.setCursor(0,1);
lcd.print("2.komora zatvorena");
lcd.setCursor(0,2);
lcd.print("3.komora zatvorena");
lcd.setCursor(0,3);
lcd.print("4.komora zatvorena");
}
void vypis_otvorena(){
lcd.setCursor(9, riadok);
lcd.print(" ");
lcd.setCursor(9, riadok);
lcd.print("otvorena");
}
void vypis_zatvorena(){
lcd.setCursor(9, riadok);
lcd.print(" ");
lcd.setCursor(9, riadok);
lcd.print("zatvorena");
}
ISR(PCINT2_vect){
if(test(PIND, 7) == 0 && pole[0] == true){
riadok = 0;
vypis_otvorena();
pole[0] = false;
}
else if(test(PIND, 7) != 0 && pole[0] == false){
riadok = 0;
vypis_zatvorena();
pole[0] = true;
}
if(test(PIND, 6) == 0 && pole[1] == true){
riadok = 1;
vypis_otvorena();
pole[1] = false;
}
else if(test(PIND, 6) != 0 && pole[1] == false){
riadok = 1;
vypis_zatvorena();
pole[1] = true;
}
if(test(PIND, 5) == 0 && pole[2] == true){
riadok = 2;
vypis_otvorena();
pole[2] = false;
}
else if(test(PIND, 5) != 0 && pole[2] == false){
riadok = 2;
vypis_zatvorena();
pole[2] = true;
}
if(test(PIND, 4) == 0 && pole[3] == true){
riadok = 3;
vypis_otvorena();
pole[3] = false;
}
else if(test(PIND, 4) != 0 && pole[3] == false){
riadok = 3;
vypis_zatvorena();
pole[3] = true;
}
}