#define set0(r,b) r&= ~(1<<b)
#define set1(r,b) r |= 1<<b
#define test(r,b) ( r&(1<<b) )
byte lastState;
int cislo = 0;
int vysledokAnalog;
void setup() {
Serial.begin(9600);
Serial.println("A");
//nastavenie zeleneho tlacitka
set0(DDRD, 7); //input pcint23
set1(PORTD, 7); //high
//nastavenie cervenho tlacitka
set0(DDRD, 6); //pcint22
set1(PORTD, 6);
//nastavenie modreho tlacitka
set0(DDRD, 5); //pcint21
set1(PORTD, 5);
set1(DDRB, 0); //pcint21
set0(PORTB, 0);
set1(PCICR, PCIE2); //zapnutie preruseni na PCIE2
set1(SREG, 7); //globalne povolenie preruseni
set1(PCMSK2, PCINT23); //zapnutie na konkretnom pine
set1(PCMSK2, PCINT22);
set1(PCMSK2, PCINT21);
set1(PCMSK2, PCINT20);
lastState = PIND; //nacitanie aktualneho stavu celeho registra
}
void loop() {
if(analogRead(A0) < cislo)
{
set1(PORTB, 0);
}
else{
set0(PORTB, 0);
}
}
ISR(PCINT2_vect)
{
if(test(PIND, 7) ==0 && test(lastState, 7) != test(PIND, 7)) //podmienka ci sa
//zmenil stav pinov. ak ano, znameno to ze na tomto pine prislo k prerusenie ak nie, do podmienky nevojde
{
cislo=816;
Serial.println("porovnavacia hodnota: 4");
}
if(test(PIND, 6) ==0 && test(lastState, 6) != test(PIND, 6))
{
cislo=612;
Serial.println("porovnavacia hodnota: 3");
}
if(test(PIND, 5) ==0 && test(lastState, 5) != test(PIND, 5))
{
cislo=408;
Serial.println("porovnavacia hodnota: 2");
}
if(test(PIND, 4) ==0 && test(lastState, 4) != test(PIND, 4))
{
cislo = 204;
Serial.println("porovnavacia hodnota: 1");
}
lastState = PIND; //zaktualizoovanie stavu pinov
}