#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
int cases;
int _sw1 = 12;
int _sw2 = 13;
int sw1,sw2,g,r;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void lcd_show() {
switch(cases) {
case 0:
lcd.clear();
lcd.print(">Options 1");
lcd.setCursor(0,1);
lcd.print(" Options 2");
lcd.setCursor(0,2);
lcd.print(" Options 3");
lcd.setCursor(0,3);
lcd.print(" Options 4");
delay(500);
break;
case 1:
lcd.clear();
lcd.print(" Options 1");
lcd.setCursor(0,1);
lcd.print(">Options 2");
lcd.setCursor(0,2);
lcd.print(" Options 3");
lcd.setCursor(0,3);
lcd.print(" Options 4");
delay(500);
break;
case 2:
lcd.clear();
lcd.print(" Options 1");
lcd.setCursor(0,1);
lcd.print(" Options 2");
lcd.setCursor(0,2);
lcd.print(">Options 3");
lcd.setCursor(0,3);
lcd.print(" Options 4");
delay(500);
break;
case 3:
lcd.clear();
lcd.print(" Options 1");
lcd.setCursor(0,1);
lcd.print(" Options 2");
lcd.setCursor(0,2);
lcd.print(" Options 3");
lcd.setCursor(0,3);
lcd.print(">Options 4");
break;
case 4:
cases = 3;
break;
}
}
uint8_t left_region[] = {
0b00011,
0b00010,
0b00010,
0b00010,
0b00010,
0b00010,
0b00010,
0b00011,
};
uint8_t right_region[] = {
0b11000,
0b01000,
0b01000,
0b01000,
0b01000,
0b01000,
0b01000,
0b11000,
};
uint8_t blank_bar[] = {
0b11111,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b11111
};
uint8_t filled_bar[] = {
0b11111,
0b00000,
0b11111,
0b11111,
0b11111,
0b11111,
0b00000,
0b11111
};
void loading() {
lcd.begin(20,4);
lcd.setCursor(5,0);
lcd.print("Loading. .");
lcd.setCursor(3,1);
lcd.print("\1\3\3\3\3\3\3\3\3\3\3\3\3");
lcd.setCursor(16,1);
lcd.print("\2");
for (int l = 0; l <= 11; l++) {
delay(300);
lcd.setCursor(l+4,1);
lcd.print("\4");
}
}
void setup() {
Serial.begin(9600);
DDRB = 0;
PORTB = 0;
lcd.init();
lcd.backlight();
lcd.createChar(1 , left_region);
lcd.createChar(2 , right_region);
lcd.createChar(3 , blank_bar);
lcd.createChar(4 , filled_bar);
loading();
delay(800);
lcd.clear();
}
void loop() {
g = digitalRead(_sw1);
r = digitalRead(_sw2);
if (cases < 0) {
cases = 0;
}
if (g != sw1) {
sw1 = g;
cases++;
}
if (r != sw2) {
sw2 = r;
cases--;
}
delay(120);
lcd_show();
Serial.println(cases);
}