#include <LiquidCrystal_I2C.h>
#include <Button.h>
#define BUTTON_UP 13
#define BUTTON_DOWN 12
#define BUTTON_LEFT 11
#define BUTTON_RIGHT 10
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES); // init LCD
byte menuPosition = 1;
Button button1(BUTTON_UP);
Button button2(BUTTON_DOWN);
Button button3(BUTTON_LEFT);
Button button4(BUTTON_RIGHT);
void setup() {
button1.begin();
button2.begin();
button3.begin();
button4.begin();
lcd.begin(20, 4);
lcd.backlight();
}
void loop() {
poll_buttons();
draw_menu_lcd(menuPosition);
}
void poll_buttons() {
if (button1.pressed()){
menuPosition--;
lcd.clear();
}
if (button2.pressed()){
menuPosition++;
lcd.clear();
}
}
void draw_menu_lcd(byte menuPosition) {
switch(menuPosition) {
case 1:
lcd.setCursor(0, 0); lcd.print("->Menu item 1");
lcd.setCursor(0, 1); lcd.print(" Menu item 2");
lcd.setCursor(0, 2); lcd.print(" Menu item 3");
lcd.setCursor(0, 3); lcd.print(" Menu item 4");
break;
case 2:
lcd.setCursor(0, 0); lcd.print(" Menu item 1");
lcd.setCursor(0, 1); lcd.print("->Menu item 2");
lcd.setCursor(0, 2); lcd.print(" Menu item 3");
lcd.setCursor(0, 3); lcd.print(" Menu item 4");
break;
case 3:
lcd.setCursor(0, 0); lcd.print(" Menu item 1");
lcd.setCursor(0, 1); lcd.print(" Menu item 2");
lcd.setCursor(0, 2); lcd.print("->Menu item 3");
lcd.setCursor(0, 3); lcd.print(" Menu item 4");
break;
case 4:
lcd.setCursor(0, 0);
lcd.setCursor(0, 0); lcd.print(" Menu item 1");
lcd.setCursor(0, 1); lcd.print(" Menu item 2");
lcd.setCursor(0, 2); lcd.print(" Menu item 3");
lcd.setCursor(0, 3); lcd.print("->Menu item 4");
break;
}
}