#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define sw 8
#define dt 7
double lastEncode = millis();
double lastClick = millis();
int option = 0;
bool lastSwState = LOW;
bool currentSwState = LOW;
bool runProgram1 = false;
bool runProgram2 = false;
bool runProgram3 = false;
double lastDraw = millis();
void encoderMoved()
{
if(millis() - lastEncode > 5)
{
if(digitalRead(dt) == HIGH)
{
option = (option+1) % 3;
}
if(digitalRead(dt) == LOW)
{
option--;
if(option < 0)
option = 2;
}
lastEncode = millis();
}
}
void chooseOption()
{
if(millis() - lastClick > 5)
{
Serial.println("Option : ");
Serial.print(option);
lastClick = millis();
}
}
void drawMenu()
{
lcd.setCursor(0,0);
lcd.print("dk");
lcd.setCursor(6,0);
lcd.print("uk");
lcd.setCursor(1,0);
lcd.print("zp");
lcd.setCursor(1,6);
lcd.print("pk");
}
void drawDot()
{
switch(option)
{
case 0:
lcd.setCursor(3,0);
lcd.print("*");
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(15,0);
lcd.print(" ");
break;
case 1:
lcd.setCursor(3,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print("*");
lcd.setCursor(15,0);
lcd.print(" ");
break;
case 2:
lcd.setCursor(3,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(15,0);
lcd.print("*");
break;
}
}
void setup() {
// Init
lcd.init();
lcd.backlight();
// Print something
lcd.clear();
drawMenu();
pinMode (dt,INPUT);
pinMode (sw,INPUT);
attachInterrupt(0, encoderMoved, FALLING);
Serial.begin (9600);
}
void loop() {
lastSwState = currentSwState;
currentSwState = digitalRead(sw);
if(currentSwState && !lastSwState)
{
chooseOption();
}
if(millis() - lastDraw > 100)
{
drawDot();
lastDraw = millis();
}
}