CCCPaste

"Button Navigation" rev_03

/********* 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 */