#include <Wire.h> // Tambahkan library Wire untuk komunikasi I2C
#include <LiquidCrystal_I2C.h>
// Definisi pin
#define TCS_S0 2
#define TCS_S1 3
#define TCS_S2 4
#define TCS_S3 5
#define TCS_OUT 6
#define LDR A0
#define LED 13
#define BUZZER 12
// Definisi konstanta
#define MERAH 0
#define HIJAU 1
#define BIRU 2
#define PUTIH 3
// Deklarasi variabel
int r, g, b, lux;
// Fungsi untuk membaca nilai RGB dari sensor TCS3200
void bacaRGB() {
r = analogRead(TCS_OUT);
g = analogRead(TCS_OUT);
b = analogRead(TCS_OUT);
}
// Fungsi untuk mendeteksi warna
int deteksiWarna() {
// Hitung nilai RGB
int sum = r + g + b;
// Jika nilai RGB mendekati 0
if (sum < 200) {
return PUTIH;
}
// Jika nilai R > G > B
if (r > g && r > b) {
return MERAH;
}
// Jika G > R > B
if (g > r && g > b) {
return HIJAU;
}
// Jika B > R > G
return BIRU;
}
// Fungsi utama
void setup() {
// Inisialisasi komunikasi I2C
Wire.begin();
// Konfigurasi pin LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
lcd.init();
lcd.backlight();
// Konfigurasi pin sensor LDR
pinMode(LDR, INPUT);
// Konfigurasi pin LED
pinMode(LED, OUTPUT);
// Konfigurasi pin buzzer
pinMode(BUZZER, OUTPUT);
}
// Fungsi loop
void loop() {
// Baca nilai RGB dari sensor TCS3200
bacaRGB();
// Deteksi warna
int warna = deteksiWarna();
// Tampilkan hasil deteksi warna pada LCD
lcd.setCursor(0, 0);
lcd.print("Warna: ");
lcd.print(warna);
// Tampilkan nilai sensor LDR pada LCD
lcd.setCursor(0, 1);
lcd.print("LDR: ");
lcd.print(lux);
// Jika warna merah terdeteksi, nyalakan buzzer
if (warna == MERAH) {
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
// Tunggu 1 detik
delay(1000);
}