#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define rly 3
#define b1 7
#define b2 4
#define l1 3
LiquidCrystal_I2C lcd(0x27, 16, 2);
int credits = 0;
bool b1press = false;
bool b2press = false;
void setup() {
pinMode(rly, OUTPUT);
pinMode(l1, OUTPUT);
pinMode(b1, INPUT_PULLUP);
pinMode(b2, INPUT_PULLUP);
digitalWrite(rly, LOW);
digitalWrite(l1, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Coin: 0");
}
void loop() {
if (digitalRead(b1) == LOW && !b1press) {
delay(200); // Debounce
if (digitalRead(b1) == LOW) {
credits++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Coin: ");
lcd.print(credits);
b1press = true;
}
}
if (digitalRead(b1) == HIGH) {
b1press = false;
}
if (digitalRead(b2) == LOW && !b2press && credits > 0) {
delay(200);
if (digitalRead(b2) == LOW) {
int dt = credits;
credits = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Dispensing...");
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(dt);
lcd.print("s");
digitalWrite(rly, HIGH);
digitalWrite(l1, HIGH);
delay(dt * 1000);
digitalWrite(rly, LOW);
digitalWrite(l1, LOW);
// Update LCD after dispensing
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Coin: 0");
b2press = true;
}
}
if (digitalRead(b2) == HIGH) {
b2press = false;
}
}