#include <LiquidCrystal.h>
#include <Wire.h>
#define MAX_STRING_LENGTH 15
#define MAX_CART_ITEMS 10
// LCD Pin Configuration
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Define button pins
int buttonScroll = 13, buttonAdd = 10, buttonSubmit = 8;
// I2C Address
int address = 9;
// MenuItem Structure
struct MenuItem {
char itemName[MAX_STRING_LENGTH];
char itemPrice[MAX_STRING_LENGTH];
};
// Menu items array
const char ITEM_PRICE[] = "9.99";
MenuItem menuItems[10] = {
{"Item 1", ITEM_PRICE},
{"Item 2", ITEM_PRICE},
{"Item 3", ITEM_PRICE},
{"Item 4", ITEM_PRICE},
{"Item 5", ITEM_PRICE},
{"Item 6", ITEM_PRICE},
{"Item 7", ITEM_PRICE},
{"Item 8", ITEM_PRICE},
{"Item 9", ITEM_PRICE},
{"Item 10", ITEM_PRICE}
};
// Cart array
MenuItem cart[MAX_CART_ITEMS];
int cartItemCount = 0;
int currentItemIndex = 0; // Current item index for the menu
void setup() {
Serial.begin(9600);
Wire.begin();
// Initialize buttons
pinMode(buttonScroll, INPUT);
pinMode(buttonAdd, INPUT);
pinMode(buttonSubmit, INPUT);
// Initialize LCD
lcd.begin(16, 2); // Adjust the size as per your LCD
lcd.print(menuItems[currentItemIndex].itemName);
}
void loop() {
handleMenu();
if (digitalRead(buttonSubmit) == HIGH) {
displayCartContents();
Wire.beginTransmission(address);
for (int i = 0; i < cartItemCount; i++) {
for (size_t j = 0; j < MAX_STRING_LENGTH; j++) {
Wire.write(cart[i].itemName[j]);
}
for (size_t j = 0; j < MAX_STRING_LENGTH; j++) {
Wire.write(cart[i].itemPrice[j]);
}
}
Wire.endTransmission();
lcd.clear();
lcd.print("Cart submitted");
delay(1000); // Display message for a while
// Optionally clear the cart after submitting
cartItemCount = 0;
}
// Requesting data from slave
int x = 0;
Wire.requestFrom(address, 1);
while (Wire.available()) {
x = Wire.read();
}
}
void handleMenu() {
// Scroll through menu items
if (digitalRead(buttonScroll) == HIGH) {
lcd.clear();
currentItemIndex = (currentItemIndex + 1) % 10;
lcd.print(menuItems[currentItemIndex].itemName);
delay(200); // Debouncing
}
// Add item to cart
if (digitalRead(buttonAdd) == HIGH) {
addItemToCart();
}
}
void addItemToCart() {
Serial.println("Attempting to add item to cart...");
if (cartItemCount < MAX_CART_ITEMS) {
cart[cartItemCount] = menuItems[currentItemIndex];
Serial.println(menuItems[currentItemIndex]);
Serial.println(cartItemCount);
cartItemCount++;
lcd.clear();
lcd.print("Added: ");
lcd.print(menuItems[currentItemIndex].itemName);
Serial.println("Item added to cart");
} else {
lcd.clear();
lcd.print("Cart full");
Serial.println("Cart is full, can't add more items");
Serial.println(cartItemCount);
}
}
void displayCartContents() {
lcd.clear();
for (int i = 0; i < cartItemCount; i++) {
lcd.setCursor(0, 0); // Set cursor to first line
lcd.print("Item: ");
lcd.print(cart[i].itemName);
lcd.setCursor(0, 1); // Set cursor to second line
lcd.print("Price: ");
lcd.print(cart[i].itemPrice);
delay(2000); // Display each item for 2 seconds
lcd.clear(); // Clear LCD for the next item
}
}