#include <Wire.h> // pridaj knižnice pre I2C a displej
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define set0(r,b) r&=~(1<<b) //makro
#define set1(r,b) r|=(1<<b)
#define test(r,b) (r&(1<<b))
int volatile cislo = 0;
ISR(PCINT2_vect) //prerusenie reaguje len dobeznu hranu
{
if( test(PIND,6) == 0) //testujem, ci prisla dobezna hrana
{
cislo++;}
if( test(PIND,7) == 0) //testujem, ci prisla dobezna hrana
{
cislo--;}
Serial.println(cislo);
}
void setup()
{
Serial.begin(9600);
Serial.println("Init OK");
lcd.init(); // inicializacia lcd
lcd.backlight(); // zapnúť podsvietenie
set0(DDRD,6); //6bit portu D - vstup
set1(PORTD,6); //aktivacia pull-up
set0(DDRD,7); //6bit portu D - vstup
set1(PORTD,7); //aktivacia pull-up
set1(SREG,7); //povolenie globalnych preruseni
set1(PCICR,PCIE2); //povolenie preruseni na porte D
set1(PCMSK2,PCINT22); //povolenie prerusenia na PCINT22, resp Arduino pin 6
set1(PCMSK2,PCINT23); //povolenie prerusenia na PCINT22, resp Arduino pin 7
delay(500);
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(cislo);
delay(300);
}