#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define changeBTN 10
#define acceptBTN 11
#define settingBTN 12
#define relayRes 13
int changeBTNState;
int acceptBTNState;
int setDone;
int itemValues[16]; // Update the array to handle 16 items
int selectedItem = 0; // Initial item value
boolean settingsDone = false;
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(changeBTN, INPUT_PULLUP);
pinMode(acceptBTN, INPUT_PULLUP);
pinMode(settingBTN, INPUT_PULLUP);
pinMode(relayRes, OUTPUT);
// Load item values from EEPROM
for (int i = 0; i < 16; i++) { // Update the loop to handle 16 items
itemValues[i] = EEPROM.read(i); // Read from EEPROM
}
}
void loop() {
settingsMenu();
}
void settingsMenu() {
// Wait to press settingBTN
if (digitalRead(settingBTN) == LOW) {
setDone = 1;
lcd.setCursor(0, 0);
lcd.print(" SETTINGS MENU");
lcd.setCursor(0, 1);
lcd.print("CHANGE THE PRICE");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CHANGE THE PRICE");
lcd.setCursor(0, 1);
displayItemValue(selectedItem + 1, itemValues[selectedItem]);
settingsDone = true;
delay(1000);
}
// After settingBTN is pressed, wait to press changeBTN
if (settingsDone == true) {
changeBTNState = digitalRead(changeBTN);
if (changeBTNState == LOW && setDone == 1) {
if (itemValues[selectedItem] < 99) {
itemValues[selectedItem] += 1;
} else {
itemValues[selectedItem] = 0; // Reset to 0 if it reaches 99
}
displayItemValue(selectedItem + 1, itemValues[selectedItem]);
delay(150);
}
}
// Press acceptBTN to finish setting an item and move to the next one
if (digitalRead(acceptBTN) == LOW && settingsDone) {
selectedItem++;
if (selectedItem >= 16) { // Check for all 16 items
// All items are done, exit the settings
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ALL SETTINGS");
lcd.setCursor(0, 1);
lcd.print(" ARE DONE");
settingsDone = false;
// Save item values to EEPROM
for (int i = 0; i < 16; i++) { // Update the loop to handle 16 items
EEPROM.write(i, itemValues[i]); // Write to EEPROM
}
delay(1000);
digitalWrite(relayRes, HIGH);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CHANGE THE PRICE");
lcd.setCursor(0, 1);
displayItemValue(selectedItem + 1, itemValues[selectedItem]);
delay(1000);
}
}
}
void displayItemValue(int itemNumber, int itemValue) {
lcd.setCursor(0, 1);
char lcdBuffer[16];
sprintf(lcdBuffer, "ITEM %d: P%d.00", itemNumber, itemValue);
lcd.print(lcdBuffer);
}