#include <LiquidCrystal.h>
// Inisialisasi LCD dengan pin yang digunakan
LiquidCrystal lcd(6, 7, 8, 9, 10, 11);
// Pin sensor dan output
const int coin10Pin = 2;
const int coin20Pin = 3;
const int coin50Pin = 4;
const int colorSensorPin = A0; // Sensor warna
const int buzzerPin = 5;
const int resetButtonPin = 12;
// Pembolehubah untuk jumlah
float totalAmount = 0.0;
// Fungsi untuk bunyikan buzzer
void beepBuzzer() {
tone(buzzerPin, 1000, 200); // Bunyi buzzer pada frekuensi 1000 Hz selama 200 ms
}
// Fungsi untuk tambah nilai berdasarkan syiling yang dikesan
void checkCoin(int coinPin, float coinValue) {
if (digitalRead(coinPin) == LOW) { // Syiling dikesan
totalAmount += coinValue; // Tambah nilai syiling pada jumlah
beepBuzzer(); // Bunyi buzzer
delay(200); // Debounce
while (digitalRead(coinPin) == LOW); // Tunggu sehingga dilepaskan
}
}
// Fungsi untuk mengesan duit kertas berdasarkan warna
void checkColorSensor() {
int colorValue = analogRead(colorSensorPin); // Baca nilai dari sensor warna
if (colorValue < 300) { // Contoh: Nilai untuk warna biru (RM1)
totalAmount += 1.00;
beepBuzzer();
delay(200);
} else if (colorValue >= 300 && colorValue < 600) { // Contoh: Nilai untuk warna hijau (RM5)
totalAmount += 5.00;
beepBuzzer();
delay(200);
} else if (colorValue >= 600) { // Contoh: Nilai untuk warna merah (RM10)
totalAmount += 10.00;
beepBuzzer();
delay(200);
}
}
// Fungsi untuk memaparkan jumlah terkini pada LCD
void displayTotalAmount() {
lcd.setCursor(0, 1);
lcd.print("Jumlah: RM ");
lcd.print(totalAmount, 2); // Papar jumlah dengan dua tempat perpuluhan
lcd.print(" "); // Pastikan baris bersih dari sisa teks lama
}
// Fungsi untuk reset jumlah jika butang ditekan
void checkResetButton() {
if (digitalRead(resetButtonPin) == LOW) { // Jika butang reset ditekan
totalAmount = 0; // Tetapkan jumlah semula ke 0
displayTotalAmount(); // Paparkan jumlah yang telah ditetapkan semula
delay(500); // Debounce untuk elakkan reset berulang
}
}
void setup() {
// Tetapkan mod pin
pinMode(coin10Pin, INPUT_PULLUP);
pinMode(coin20Pin, INPUT_PULLUP);
pinMode(coin50Pin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
pinMode(resetButtonPin, INPUT_PULLUP);
// Tetapkan LCD
lcd.begin(16, 2); // Mulakan LCD dengan 16 lajur dan 2 baris
lcd.print("Jumlah: RM 0.00"); // Paparkan jumlah permulaan
}
void loop() {
// Semak syiling
checkCoin(coin10Pin, 0.10);
checkCoin(coin20Pin, 0.20);
checkCoin(coin50Pin, 0.50);
// Semak duit kertas berdasarkan warna
checkColorSensor();
// Paparkan jumlah pada LCD
displayTotalAmount();
// Semak jika butang reset ditekan
checkResetButton();
}