#define echoPin 5
#define trigPin 4
#define ledMerah 9
#define ledKuning 8
#define ledHijau 7
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, LOW);
digitalWrite(ledHijau, LOW);
}
float readDistanceCM() {
// trigger 10us
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// echo (timeout 30 ms)
unsigned long duration = pulseIn(echoPin, HIGH, 30000UL);
if (duration == 0) return NAN; // di luar jangkauan
return duration * 0.0343f / 2.0f; // cm
}
void setLED(bool r, bool y, bool g) {
digitalWrite(ledMerah, r ? HIGH : LOW);
digitalWrite(ledKuning, y ? HIGH : LOW);
digitalWrite(ledHijau, g ? HIGH : LOW);
}
void loop() {
float distance = readDistanceCM();
Serial.print("Jarak: ");
if (isnan(distance)) {
Serial.println("Out of range");
setLED(false, false, false);
} else {
Serial.print(distance, 1);
Serial.println(" cm");
if (distance < 50.0) { // air tinggi
setLED(true, false, false); // merah
} else if (distance < 100.0) { // air sedang
setLED(false, true, false); // kuning
} else { // air rendah
setLED(false, false, true); // hijau
}
}
delay(200);
}