#define set0(r,b) r&= ~(1<<b)
#define set1(r,b) r |= 1<<b
#define test(r,b) ( r&(1<<b) )
void setup() {
Serial.begin(9600);
//nastavenie zeleneho tlacitka
set0(DDRD, 7); //input
set1(PORTD, 7); //high
//nastavenie cervenho tlacitka
set0(DDRB, 3);
set1(PORTB, 3);
//nastavenie modreho tlacitka
set0(DDRC, A3);
set1(PORTC, A3);
//SETUP PRERUSENIA PRE ZELENE
set1(PCICR, PCIE2); //PCIR zapinanie celeho registra. registre su rozdelene na 3 casti
//PCIE2 je cast s pcint od 23 do 16
set1(SREG, 7); //dovolovanie pouzivat prerusenia, staci spravit raz, je to globalne
set1(PCMSK2, PCINT23); //zapina konkretny pin (v tomto pripade pcint23)
//prerusenie pre cervene
set1(PCICR, PCIE0);
set1(SREG, 11);
set1(PCMSK0, PCINT3);
//nastavenie prerusenia pre modre
set1(PCICR, PCIE1);
set1(SREG, A3);
set1(PCMSK1, PCINT11);
}
int cislo = 0;
void loop() {
// put your main code here, to run repeatedly:
}
ISR(PCINT2_vect) //vector prerusenie pre PCIE2 tj. zelene tlacitko
{
if(test(PIND, 7) ==0 )
{
cislo++;
Serial.println(cislo);
}
}
ISR(PCINT0_vect) //cervene prerusenie
{
if(test(PINB, 3) == 0 )
{
cislo--;
Serial.println(cislo);
}
}
ISR(PCINT1_vect) //moere prerusenie
{
if(test(PINC, A3) == 0 )
{
cislo=0;
Serial.println(cislo);
}
}