#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27,20,4);
boolean btnUp=false;
boolean btnDown=false;
boolean btnSelect=false;
int arrowPosition=0;
void setup() {
// Serial
Serial.begin(9600);
// Display setup
lcd.init();
lcd.backlight();
lcd.clear();
// Menu seetup
lcd.setCursor(3,0);
lcd.print("1 dioda blika");
lcd.setCursor(3,1);
lcd.print("2 diody blikaju");
lcd.setCursor(3,2);
lcd.print("3 diody blikaju");
lcd.setCursor(3,3);
lcd.print("4 diody blikaju");
lcd.setCursor(0,0);
lcd.print(">");
// Pin setup
DDRB &=~(1<<1);
DDRB &=~(1<<2);
DDRB &=~(1<<3);
PORTB |=1<<1;
PORTB |=1<<2;
PORTB |=1<<3;
DDRD |= (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5);
}
void loop() {
menuSelector();
}
void menuSelector(){
if((PINB&(1<<1)) !=0 && btnUp !=true){
btnUp=true;
}
if((PINB&(1<<1)) ==0 && btnUp ==true){
btnUp=false;
arrowPosition=arrowPosition + 1;
if(arrowPosition>3){
arrowPosition=0;
}
lcd.setCursor(0,arrowPosition-1);
lcd.print(" ");
lcd.setCursor(0,arrowPosition);
lcd.print(">");
}
if((PINB&(1<<3)) !=0 && btnDown !=true){
btnDown=true;
}
if((PINB&(1<<3)) ==0 && btnDown ==true){
btnDown=false;
arrowPosition=arrowPosition - 1;
if(arrowPosition<0){
arrowPosition=3;
}
lcd.setCursor(0,arrowPosition+1);
lcd.print(" ");
lcd.setCursor(0,arrowPosition);
lcd.print(">");
}
if((PINB&(1<<2)) !=0 && btnSelect !=true){
btnSelect=true;
}
if((PINB&(1<<2)) ==0 && btnSelect ==true){
btnSelect=false;
lightLed();
}
}
void lightLed(){
unlight();
switch (arrowPosition) {
case 0: PORTD |= (1 << 2); break;
case 1: PORTD |= (1 << 2) | (1 << 3); break;
case 2: PORTD |= (1 << 2) | (1 << 3) | (1 << 4); break;
case 3: PORTD |= (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5); break;
}
}
void unlight(){
PORTD &= ~(1 << 2);
PORTD &= ~(1 << 3);
PORTD &= ~(1 << 4);
PORTD &= ~(1 << 5);
}