#include <LiquidCrystal.h> // Include the LiquidCrystal library
const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int buttonUp = 6, buttonDown = 5, buttonEnter = 4, switchStart = 39;
String mainMenus[] = {"Program", "People", "Cartridges"};
String* subMenus[] = {
new String[5]{"Morning", "Preworkout", "During Workout", "Post Workout", "Sleep"},
new String[3]{"Henry", "Sylvia", "Jason"},
new String[8]{"Cartridge 1", "Cartridge 2", "Cartridge 3", "Cartridge 4", "Cartridge 5", "Cartridge 6", "Cartridge 7", "Cartridge 8"}
};
int subMenuSizes[] = {5, 3, 8};
int currentMenu = 0, currentSubMenu = -1, submenuDisplayStart = 0;
bool programRunning = false;
bool lastSwitchState = HIGH;
void setup() {
lcd.begin(16, 2);
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
pinMode(buttonEnter, INPUT_PULLUP);
pinMode(switchStart, INPUT_PULLUP);
lcd.clear();
displayMenu();
}
void loop() {
bool switchState = digitalRead(switchStart);
// Update the program running state based on the switch position
if (switchState != lastSwitchState) {
lastSwitchState = switchState;
programRunning = (switchState == LOW); // Assuming LOW means the switch is on
lcd.clear();
if (programRunning) {
lcd.print("Program Running");
delay(2000); // Show message for 2 seconds
displayMenu();
} else {
lcd.clear();
}
}
if (programRunning) {
if (digitalRead(buttonUp) == LOW) {
if (currentSubMenu >= 0) {
currentSubMenu = (currentSubMenu - 1 + subMenuSizes[currentMenu]) % subMenuSizes[currentMenu];
submenuDisplayStart = max(0, currentSubMenu - 1);
} else {
currentMenu = (currentMenu - 1 + 3) % 3;
}
displayMenu();
delay(200);
}
if (digitalRead(buttonDown) == LOW) {
if (currentSubMenu >= 0) {
currentSubMenu = (currentSubMenu + 1) % subMenuSizes[currentMenu];
submenuDisplayStart = min(subMenuSizes[currentMenu] - 2, currentSubMenu);
} else {
currentMenu = (currentMenu + 1) % 3;
}
displayMenu();
delay(200);
}
if (digitalRead(buttonEnter) == LOW) {
if (currentSubMenu >= 0) {
currentSubMenu = -1;
} else {
currentSubMenu = 0;
}
displayMenu();
delay(200);
}
}
}
void displayMenu() {
lcd.clear();
if (currentSubMenu >= 0) {
lcd.setCursor(0, 0);
lcd.print((currentSubMenu == submenuDisplayStart ? ">" : " ") + subMenus[currentMenu][submenuDisplayStart]);
lcd.setCursor(0, 1);
lcd.print((currentSubMenu == submenuDisplayStart + 1 ? ">" : " ") + subMenus[currentMenu][min(subMenuSizes[currentMenu] - 1, submenuDisplayStart + 1)]);
} else {
lcd.setCursor(0, 0);
lcd.print((currentMenu == 0 ? ">" : " ") + mainMenus[0]);
lcd.setCursor(0, 1);
lcd.print((currentMenu == 1 ? ">" : " ") + mainMenus[1]);
if (currentMenu == 2) {
lcd.setCursor(0, 1);
lcd.print(">");
lcd.print(mainMenus[2]);
}
}
}