#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
#define VERT_PIN A0
#define HORZ_PIN A1
#define SEL_PIN 10
#define ledPin 12
int mainMenuCounter = 3, buttonCounter = 0, ledMenuCounter = 2, exitValue = 0;
int vert, oldVert;
bool selPressed, oldSelPressed = 1;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
lcd.init();
lcd.backlight();
lcd.begin(16, 2);
pinMode(VERT_PIN, INPUT);
pinMode(HORZ_PIN, INPUT);
pinMode(SEL_PIN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
vert = analogRead(VERT_PIN);
ReadButton();
if (vert == 1023 && oldVert < 600)
{
lcd.clear();
if (mainMenuCounter < 4)
{
mainMenuCounter++;
if (buttonCounter > 0 && ledMenuCounter < 3)
{
ledMenuCounter++;
}
}
}
if (vert == 0 && oldVert > 400)
{
lcd.clear();
if (mainMenuCounter > 0)
{
mainMenuCounter--;
if (buttonCounter > 0 && ledMenuCounter > 0)
{
ledMenuCounter--;
}
}
}
oldVert = vert;
if (buttonCounter == exitValue)
{
if (mainMenuCounter >= 3)
{
MainMenu1();
}
if (mainMenuCounter == 2)
{
MainMenu2();
}
if (mainMenuCounter <= 1)
{
MainMenu3();
}
}
else
{
if (ledMenuCounter >= 2)
{
ledMenu1();
if (buttonCounter % 2 == 0)
{
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
if (ledMenuCounter <= 1)
{
ledMenu2();
if (buttonCounter % 2 == digitalRead(ledPin))
{
exitValue = buttonCounter;
mainMenuCounter = 3;
}
}
}
Serial.print(buttonCounter);
Serial.print(" ");
Serial.println(exitValue);
}
void MainMenu1()
{
lcd.setCursor(0, 0);
lcd.print("LED control <-");
lcd.setCursor(0, 1);
lcd.print("Temperature");
}
void MainMenu2()
{
lcd.setCursor(0, 0);
lcd.print("Temperature <-");
lcd.setCursor(0, 1);
lcd.print("Win. Ctrl");
}
void MainMenu3()
{
lcd.setCursor(0, 0);
lcd.print("Win. Ctrl <-");
}
void ledMenu1()
{
lcd.setCursor(0, 0);
lcd.print("ON/OFF <-");
lcd.setCursor(0, 1);
lcd.print("Exit");
}
void ledMenu2()
{
lcd.setCursor(0, 0);
lcd.print("ON/OFF");
lcd.setCursor(0, 1);
lcd.print("Exit <-");
}
void ReadButton()
{
selPressed = digitalRead(SEL_PIN) == LOW;
if (selPressed == 1 && oldSelPressed == 0)
{
buttonCounter++;
lcd.clear();
}
else
{
delay(50);
}
oldSelPressed = selPressed;
}