const int FLAME_PIN = 2;
const int WATER_PIN = 5;
const int RELAY_PIN = 7;
const int BUZZER_PIN = 8;
const int LOW_WATER_LED = 9;
// Our simulated switches connect the input pins to GND
// when switched ON.
void setup() {
pinMode(FLAME_PIN, INPUT_PULLUP);
pinMode(WATER_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LOW_WATER_LED, OUTPUT);
// Relay inactive at startup
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LOW_WATER_LED, LOW);
Serial.begin(9600);
}
void loop() {
bool flameDetected = (digitalRead(FLAME_PIN) == LOW);
bool waterAvailable = (digitalRead(WATER_PIN) == LOW);
// Pump operates only when flame is detected
// AND water is available.
bool pumpOn = flameDetected && waterAvailable;
bool lowWater = !waterAvailable;
// Wokwi relay module: LOW activates COM-to-NO
digitalWrite(RELAY_PIN, pumpOn ? LOW : HIGH);
digitalWrite(LOW_WATER_LED, lowWater ? HIGH : LOW);
// Alert when flame is detected or water is low.
if (flameDetected || lowWater) {
tone(BUZZER_PIN, 2000);
} else {
noTone(BUZZER_PIN);
}
Serial.print("Flame: ");
Serial.print(flameDetected ? "YES" : "NO");
Serial.print(" | Water: ");
Serial.print(waterAvailable ? "AVAILABLE" : "LOW");
Serial.print(" | Pump: ");
Serial.println(pumpOn ? "ON" : "OFF");
delay(200);
}