#include <LiquidCrystal_I2C.h>
// Menyiapkan pin untuk tombol
const int button1 = 2; // Tombol untuk produk 1
const int button2 = 3; // Tombol untuk produk 2
const int button3 = 4; // Tombol untuk produk 3
const int button4 = 5; // Tombol untuk produk 4
// Menyiapkan pin untuk LED
const int ledGreen = 6; // LED hijau untuk transaksi berhasil
const int ledRed = 7; // LED merah untuk transaksi gagal
// Menyiapkan LCD (alamat 0x27 untuk I2C, 16x2)
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Produk dan harga (produk 1-4)
const String products[] = {"Cokelat", "Minuman", "Kacang", "Permen"};
const int prices[] = {15000, 10000, 5000, 2000}; // Harga dalam IDR
void setup() {
// Menginisialisasi LCD
lcd.begin();
lcd.backlight();
// Menginisialisasi tombol sebagai input
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
// Menginisialisasi LED sebagai output
pinMode(ledGreen, OUTPUT);
pinMode(ledRed, OUTPUT);
// Menampilkan pesan awal di LCD
lcd.setCursor(0, 0);
lcd.print("Vending Machine");
delay(2000);
}
void loop() {
int selectedProduct = -1;
// Cek tombol yang ditekan untuk memilih produk
if (digitalRead(button1) == HIGH) {
selectedProduct = 0;
}
else if (digitalRead(button2) == HIGH) {
selectedProduct = 1;
}
else if (digitalRead(button3) == HIGH) {
selectedProduct = 2;
}
else if (digitalRead(button4) == HIGH) {
selectedProduct = 3;
}
// Jika produk dipilih, tampilkan harga dan minta uang
if (selectedProduct != -1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pilih: " + products[selectedProduct]);
lcd.setCursor(0, 1);
lcd.print("Harga: " + String(prices[selectedProduct]) + " IDR");
delay(2000);
// Menggunakan potensiometer untuk menggantikan input uang
int inputMoney = analogRead(A0); // Baca nilai dari A0 (potensiometer)
int moneyInserted = map(inputMoney, 0, 1023, 0, 20000); // Pemetaan uang ke nilai yang wajar (0-20000 IDR)
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Uang: " + String(moneyInserted) + " IDR");
delay(2000);
// Proses transaksi
if (moneyInserted >= prices[selectedProduct]) {
// Jika uang cukup, beri LED hijau
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Transaksi Berhasil!");
lcd.setCursor(0, 1);
lcd.print("Kembalian: " + String(moneyInserted - prices[selectedProduct]) + " IDR");
delay(2000);
} else {
// Jika uang kurang, beri LED merah
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Uang Kurang!");
delay(2000);
}
// Reset LED dan LCD
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, LOW);
lcd.clear();
delay(1000);
}
}