#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
Servo vendingServo; // Inisialisasi objek Servo
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD
const int ROW_NUM = 4; // jumlah baris pada keypad
const int COLUMN_NUM = 4; // jumlah kolom pada keypad
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // koneksi baris pada keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // koneksi kolom pada keypad
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
int servoPin = 10; // Pin untuk servomotor
int productsCount = 3; // Jumlah produk dalam vending machine
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
vendingServo.attach(servoPin);
lcd.print("Selamat Datang!");
delay(2000);
lcd.clear();
}
void loop() {
char key = keypad.getKey();
if (key) {
int productNumber = key - '0';
if (productNumber > 0 && productNumber <= productsCount) {
lcd.clear();
lcd.print("Pilih Produk: ");
lcd.setCursor(0,1);
lcd.print("Produk " + String(productNumber));
delay(2000);
dispenseProduct(productNumber);
lcd.clear();
lcd.print("Produk telah keluar");
delay(2000);
lcd.clear();
} else {
lcd.clear();
lcd.print("Pilihan Tidak Valid");
delay(2000);
lcd.clear();
}
}
}
void dispenseProduct(int productNumber) {
int angle = map(productNumber, 1, productsCount, 0, 180); // Map nilai produk ke sudut servomotor
vendingServo.write(angle);
delay(1000); // Delay untuk memastikan servomotor mencapai posisi yang benar
vendingServo.write(0); // Reset posisi servomotor
}