/*
Forum: https://forum.arduino.cc/t/can-anybody-review-these-code/1436533
Wokwi: https://wokwi.com/projects/459206212784980993
2026/03/22
ec2021
*/
//Motor indication
const int Mblue = 12;
const int Mred = 13;
//Level LED
const int Green = 10;
const int Yellow = 9;
const int Red = 8;
unsigned long previousLevel = 0;
//Passive buzzer
const int passiveBuzzer = 6;
//Ulatrasonic sensor
const int trig = 5;
const int echo = 4;
long duration;
float distance;
unsigned long previousUltra = 0;
//Relay
const int Relay = 7;
unsigned long previousRelay = 0;
//Water sensor
int sensorValue = 0;
unsigned long previousWater = 0;
void setup() {
Serial.begin(9600);
pinMode(Mblue, OUTPUT);
pinMode(Mred, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Yellow, OUTPUT);
pinMode(Red, OUTPUT);
pinMode(passiveBuzzer, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(Relay, OUTPUT);
pinMode(A0, INPUT);
//Passive buzzer device on sound
tone(passiveBuzzer, 1000);
delay(300);
noTone(passiveBuzzer);
delay(100);
tone(passiveBuzzer, 1500);
delay(200);
noTone(passiveBuzzer);
}
void loop() {
unsigned long currentMillis = millis();
//Ultrasonic input
if (currentMillis - previousUltra >= 700) {
previousUltra = currentMillis;
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH, 30000);
distance = duration * 0.017;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
}
//Water sensor input
if (currentMillis - previousWater >= 1000) {
previousWater = currentMillis;
sensorValue = analogRead(A0);
Serial.print("Level: ");
Serial.println(sensorValue);
}
//LEVEL LED OUTPUT
if (currentMillis - previousLevel >= 6000) {
previousLevel = currentMillis;
if (distance > 12) {
digitalWrite(Red, HIGH);
digitalWrite(Yellow, LOW);
digitalWrite(Green, LOW);
}
else if (distance > 8) {
digitalWrite(Yellow, HIGH);
digitalWrite(Red, LOW);
digitalWrite(Green, LOW);
}
else {
digitalWrite(Green, HIGH);
digitalWrite(Red, LOW);
digitalWrite(Yellow, LOW);
}
}
//Relay and Motor indication Output
if (currentMillis - previousRelay >= 1000) {
previousRelay = currentMillis;
if (distance > 14) {
digitalWrite(Relay, HIGH);
digitalWrite(Mblue, HIGH);
digitalWrite(Mred, LOW);
}
else if (sensorValue > 250) {
digitalWrite(Relay, LOW);
digitalWrite(Mblue, LOW);
digitalWrite(Mred, HIGH);
}
}
}