#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define NUM_BUTTONS 6
#define NUM_MOSFETS 5
#define NUM_LIMIT_SWITCHES 5
int buttons[] = {3, 4, 5, 6, 7, 8};
int mosfets[] = {9, 10, 11, 12, 13};
int limitSwitches[] = {A0, A1, A2, A3, A6};
int buzzerPin = A7;
int coinSlot = 2;
int pulse;
bool buttonPressed;
int itemAmounts[] = {5, 10, 15, 20, 25};
void setup() {
lcd.init();
lcd.backlight();
displayMessage("SPLOOP! SANITARY", "Vending Machine!");
delay(2000);
displayMessage("PLEASE", "SELECT YOUR ITEM");
setupPins();
}
void loop() {
for (int i = 0; i < NUM_BUTTONS; i++) {
if (digitalRead(buttons[i]) == LOW) {
buttonPressed = true;
displaySelectedItem(i);
}
}
if (buttonPressed) {
insertCoins();
}
}
void displayMessage(const char* line1, const char* line2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
}
void displaySelectedItem(int index) {
displayMessage("You've selected", ("Item: Napkin " + String(index + 1)).c_str());
delay(2000);
displayMessage("PLEASE", "INSERT COINS");
}
void setupPins() {
for (int i = 0; i < NUM_BUTTONS; i++) {
pinMode(buttons[i], INPUT_PULLUP);
}
for (int i = 0; i < NUM_MOSFETS; i++) {
pinMode(mosfets[i], OUTPUT);
}
for (int i = 0; i < NUM_LIMIT_SWITCHES; i++) {
pinMode(limitSwitches[i], INPUT_PULLUP);
}
pinMode(coinSlot, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
}
void insertCoins() {
if (digitalRead(coinSlot) == LOW) {
displayMessage("COINS INSERTED", ("Bal. PHP " + String(++pulse) + ".00").c_str());
delay(30);
}
}