#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, and 2 rows
Encoder myEncoder(D5, D6); // Connect encoder DT to D5, CLK to D6
int menuIndex = 0;
const int numMenus = 3;
void setup() {
lcd.begin(16, 2);
lcd.print("Menu Example");
// Add any other setup code you may need
}
void loop() {
int encoderValue = myEncoder.read();
// Handle menu selection
if (encoderValue > 0) {
menuIndex = (menuIndex + 1) % numMenus;
delay(100); // Debounce
} else if (encoderValue < 0) {
menuIndex = (menuIndex - 1 + numMenus) % numMenus;
delay(100); // Debounce
}
// Display the current menu on LCD
displayMenu();
// Handle actions based on the selected menu
switch (menuIndex) {
case 0:
// Code for Menu 1
break;
case 1:
// Code for Menu 2
break;
case 2:
// Code for Menu 3
break;
// Add more cases if you have more menus
}
}
void displayMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Menu ");
lcd.print(menuIndex + 1);
lcd.setCursor(0, 1);
switch (menuIndex) {
case 0:
lcd.print("Option 1");
break;
case 1:
lcd.print("Option 2");
break;
case 2:
lcd.print("Option 3");
break;
// Add more cases if you have more menus
}
}