// Definisi Pin
const int redLedPin = 2;
const int greenLedPin = 3;
const int ldrPin = A0;
const int servoPin = 9;
// Include library Servo
#include <Servo.h>
Servo myServo;
// Batas ambang intensitas cahaya
const int lowThreshold = 499;
const int mediumThreshold = 374;
const int highThreshold = 502;
// Variabel untuk menyimpan nilai LDR
int ldrValue;
// Variabel untuk kecepatan servo (delay antara gerakan)
int slowSpeed = 100; // Delay lebih lama untuk gerakan lambat (ms)
int fastSpeed = 20; // Delay lebih singkat untuk gerakan cepat (ms)
int stopSpeed = 0; // Tidak ada delay untuk diam
void setup() {
// Inisialisasi pin sebagai output atau input
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(ldrPin, INPUT);
pinMode(servoPin, OUTPUT);
// Attach servo ke pin
myServo.attach(servoPin);
// Inisialisasi Serial Monitor untuk debugging (opsional di Wokwi)
Serial.begin(9600);
Serial.println("Kontrol LED dan Servo Berdasarkan Cahaya");
}
void loop() {
// Baca nilai dari LDR
ldrValue = analogRead(ldrPin);
Serial.print("Nilai LDR: ");
Serial.println(ldrValue);
// Kontrol LED dan Kecepatan Servo
if (ldrValue <= lowThreshold) {
// Cahaya Rendah: LED Merah Menyala, Servo Lambat
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
Serial.println("Cahaya Rendah - LED Merah Menyala, Servo Lambat");
moveServo(slowSpeed);
} else if (ldrValue >= highThreshold) {
// Cahaya Tinggi: LED Hijau Menyala, Servo Cepat
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
Serial.println("Cahaya Tinggi - LED Hijau Menyala, Servo Cepat");
moveServo(fastSpeed);
} else if (ldrValue == mediumThreshold) {
// Cahaya Sedang: Kedua LED Mati, Servo Diam
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, LOW);
Serial.println("Cahaya Sedang - Kedua LED Mati, Servo Diam");
myServo.write(90); // Mengirimkan posisi yang sama berulang kali akan membuatnya diam
}
delay(100); // Jeda antara pembacaan sensor
}
// Fungsi untuk menggerakkan servo maju mundur dengan kecepatan tertentu
void moveServo(int speedDelay) {
for (int angle = 0; angle <= 180; angle += 5) {
myServo.write(angle);
delay(speedDelay);
}
for (int angle = 180; angle >= 0; angle -= 5) {
myServo.write(angle);
delay(speedDelay);
}
}