/********* Pleasedontcode.com ********** Pleasedontcode thanks you for automatic code generation! Enjoy your code! - Terms and Conditions: You have a non-exclusive, revocable, worldwide, royalty-free license for personal and commercial use. Attribution is optional; modifications are allowed, but you're responsible for code maintenance. We're not liable for any loss or damage. For full terms, please visit pleasedontcode.com/termsandconditions. - Project: "Button Navigation" - Source Code NOT compiled for: Arduino Uno - Source Code created on: 2024-06-07 03:57:12 ********* Pleasedontcode.com **********/ /****** SYSTEM REQUIREMENTS *****/ /****** SYSTEM REQUIREMENT 1 *****/ /* lcd display i2c 20x4 button pin11 UPLOW menu up */ /* button pin10 UP LOW menu enter button pin12UP LOW */ /* menu down menu Temperatur->MaxTemp->code */ /* ->MinTeamp->code Durchfluss(Flow)->MaxFlow->code */ /* ->MinTeamp->code */ /****** END SYSTEM REQUIREMENTS *****/ /****** DEFINITION OF LIBRARIES *****/ #include #include //https://github.com/evert-arias/EasyButton #include //https://github.com/marcoschwartz/LiquidCrystal_I2C /****** FUNCTION PROTOTYPES *****/ void setup(void); void loop(void); void onUpButtonPressed(); void onDownButtonPressed(); void onEnterButtonPressed(); void displayMenu(); /***** DEFINITION OF DIGITAL INPUT PINS *****/ const uint8_t UP_BUTTON_PushButton_PIN_D11 = 11; const uint8_t DOWN_BUTTON_PushButton_PIN_D12 = 12; const uint8_t ENTER_BUTTON_PushButton_PIN_D10 = 10; /***** DEFINITION OF I2C PINS *****/ const uint8_t lcd_LCD2004I2C_I2C_SLAVE_ADDRESS = 0x27; // Corrected to 0x27 based on examples /****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/ EasyButton upButton(UP_BUTTON_PushButton_PIN_D11); // Initialize EasyButton for UP button EasyButton downButton(UP_BUTTON_PushButton_PIN_D12); // Initialize EasyButton for DOWN button EasyButton enterButton(ENTER_BUTTON_PushButton_PIN_D10); // Initialize EasyButton for ENTER button LiquidCrystal_I2C lcd(lcd_LCD2004I2C_I2C_SLAVE_ADDRESS, 20, 4); // Initialize LiquidCrystal_I2C for a 20x4 display /****** MENU VARIABLES *****/ enum MenuOption { TEMPERATURE, MAX_TEMP, MIN_TEMP, FLOW, MAX_FLOW, MIN_FLOW }; MenuOption currentMenu = TEMPERATURE; void setup(void) { // put your setup code here, to run once: Serial.begin(115200); pinMode(UP_BUTTON_PushButton_PIN_D11, INPUT_PULLUP); pinMode(DOWN_BUTTON_PushButton_PIN_D12, INPUT_PULLUP); pinMode(ENTER_BUTTON_PushButton_PIN_D10, INPUT_PULLUP); // Initialize EasyButton instances upButton.begin(); downButton.begin(); enterButton.begin(); // Attach callback functions to button press events upButton.onPressed(onUpButtonPressed); downButton.onPressed(onDownButtonPressed); enterButton.onPressed(onEnterButtonPressed); // Initialize the LCD lcd.init(); lcd.backlight(); displayMenu(); } void loop(void) { // put your main code here, to run repeatedly: upButton.read(); downButton.read(); enterButton.read(); } // Callback functions for button presses void onUpButtonPressed() { Serial.println("UP button pressed"); if (currentMenu == TEMPERATURE) { currentMenu = MIN_FLOW; } else { currentMenu = static_cast(currentMenu - 1); } displayMenu(); } void onDownButtonPressed() { Serial.println("DOWN button pressed"); if (currentMenu == MIN_FLOW) { currentMenu = TEMPERATURE; } else { currentMenu = static_cast(currentMenu + 1); } displayMenu(); } void onEnterButtonPressed() { Serial.println("ENTER button pressed"); // Implement code to handle the enter button press based on the current menu } void displayMenu() { lcd.clear(); switch (currentMenu) { case TEMPERATURE: lcd.setCursor(0, 0); lcd.print("Menu: Temperature"); break; case MAX_TEMP: lcd.setCursor(0, 0); lcd.print("Menu: MaxTemp"); break; case MIN_TEMP: lcd.setCursor(0, 0); lcd.print("Menu: MinTemp"); break; case FLOW: lcd.setCursor(0, 0); lcd.print("Menu: Flow"); break; case MAX_FLOW: lcd.setCursor(0, 0); lcd.print("Menu: MaxFlow"); break; case MIN_FLOW: lcd.setCursor(0, 0); lcd.print("Menu: MinFlow"); break; } } /* END CODE */