// For Manul mode codes
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // I2C address: "0x3F" or "0x27"
const byte rightButtonPin = 13;
const byte leftButtonPin = 12;
const byte ledPin = 7; // for Manual mode
String MenuItems[] = { // Your menu items
"LED Switch"
};
void menuFunctions(int menu, byte right, byte left) // Your menu functions
{
if(menu == 1) // example function for 1. menu item
{
if(right == 1)
{
lcd.setCursor(0, 3);
lcd.print("Off ");
lcd.setCursor(10, 3);
lcd.print("On <<");
digitalWrite(ledPin, HIGH);
}
if(left == 1)
{
lcd.setCursor(0, 3);
lcd.print("Off <<");
lcd.setCursor(10, 3);
lcd.print("On ");
digitalWrite(ledPin, LOW);
}
}
}
/*** do not modify ***********************************************/
template< typename T, size_t NumberOfSize >
size_t MenuItemsSize(T (&) [NumberOfSize]){ return NumberOfSize; }
int numberOfMenuItems = MenuItemsSize(MenuItems) - 1;
int currentMenuItem = 0;
int previousMenuItem = 1;
byte button_flag = 0;
unsigned long previousMillis = millis();
/*******************************************************************/
void setup()
{
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(ledPin, OUTPUT);
pinMode(rightButtonPin, INPUT_PULLUP);
pinMode(leftButtonPin, INPUT_PULLUP);
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Menu Item:");
lcd.setCursor(0, 1);
lcd.print(MenuItems [currentMenuItem]);
if(digitalRead(rightButtonPin) == LOW && button_flag == 0)
{
menuFunctions(currentMenuItem + 1, 1, 0);
button_flag = 1;
previousMillis = millis();
}
if(digitalRead(leftButtonPin) == LOW && button_flag == 0)
{
menuFunctions(currentMenuItem + 1, 0, 1);
button_flag = 1;
previousMillis = millis();
}
if(millis() - previousMillis >= 400)
{
previousMillis = millis();
button_flag = 0;
}
}