#include <LiquidCrystal.h>
//Vyganto Jonaicio Lab3 - 2
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define LED1_PIN 4
#define LED2_PIN 6
#define BUTTON_UP_PIN 2
#define BUTTON_DOWM_PIN 3
#define BUTTON_OK_PIN 5
String menu[8] = {"1 - meniu","2 - meniu","3 - meniu",
"4 - meniu","5 - meniu","6 - meniu","7 - meniu","8 - meniu"};
char pointer = '>';
int pointerPos = 0;
int d = 100, pdelay = 50;
byte lastOk = LOW, valueOk;
int on = 0;
unsigned long buttonTime;
void setup() {
lcd.begin(16, 2);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(BUTTON_UP_PIN, INPUT);
pinMode(BUTTON_DOWM_PIN, INPUT);
pinMode(BUTTON_OK_PIN, INPUT);
buttonTime = millis();
}
void loop() {
valueOk = digitalRead(BUTTON_OK_PIN);
attachInterrupt(digitalPinToInterrupt(BUTTON_DOWM_PIN), downB, CHANGE);
attachInterrupt(digitalPinToInterrupt(BUTTON_UP_PIN), upB, CHANGE);
delay(d);
printLcd(pointerPos);
}
void downB(){
if (buttonTime + pdelay < millis() ) {
if (digitalRead(BUTTON_DOWM_PIN) == HIGH) pointerPos++;
if(pointerPos>7) pointerPos=0;
buttonTime = millis();
}
}
void upB(){
if (buttonTime + pdelay < millis() ) {
if (digitalRead(BUTTON_UP_PIN) == HIGH) pointerPos--;
if(pointerPos<0) pointerPos=7;
buttonTime = millis();
}
}
void printLcd(int a){
valueOk = digitalRead(BUTTON_OK_PIN);
if(a % 2 == 0){
lcd.setCursor(0, 0);
lcd.print(pointer + menu[a]);
if (on == HIGH) lcd.print(" ON");
else lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" " + menu[a+1]);
pressed();
delay(d);
lcd.setCursor(0, 0);
lcd.print(" " + menu[a]);//blink pointer
}
else{
lcd.setCursor(0, 0);
lcd.print(" " + menu[a-1]);
lcd.setCursor(0, 1);
lcd.print(pointer + menu[a]);
if (on == HIGH) lcd.print(" OFF");
else lcd.print(" ");
pressed();
delay(d);
lcd.setCursor(0, 1);
lcd.print(" " + menu[a]);//blink pointer
}
valueOk = digitalRead(BUTTON_OK_PIN);
}
void pressed(){
if (valueOk != lastOk) {
lastOk = valueOk;
if (valueOk == LOW) {
//on = (on == HIGH) ? LOW: HIGH;
on = LOW;
if (pointerPos % 2 == 0) digitalWrite(LED1_PIN, HIGH), digitalWrite(LED2_PIN, HIGH);
else digitalWrite(LED1_PIN, LOW), digitalWrite(LED2_PIN, LOW);
}
else on = HIGH;
}
}