#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// I2C LCD address (often 0x27 or 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo shutterServo;
const int rainSensorPin = 2;
const int servoPin = 7;
bool isRaining = false;
void setup() {
pinMode(rainSensorPin, INPUT);
Serial.begin(9600);
shutterServo.attach(servoPin);
shutterServo.write(0); // Initial position
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Rain Detector");
lcd.setCursor(0, 1);
lcd.print("Auto_Shuttering");
delay(5000);
}
void loop() {
int rainDetected = digitalRead(rainSensorPin);
if (rainDetected == LOW) { // LOW = Rain Detected for some modules
if (!isRaining) {
isRaining = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rain Detected");
lcd.setCursor(0, 1);
lcd.print("Shutter_Clossing");
shutterServo.write(90);
delay (5000);
lcd.setCursor(0, 1);
lcd.print("Shutter_Closed ");
Serial.println("Rain Detected - Shutter Closed");
}
} else {
if (isRaining) {
isRaining = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("No Rain");
lcd.setCursor(0, 1);
lcd.print("Shutter_Opening");
shutterServo.write(0);
delay(5000);
lcd.setCursor(0, 1);
lcd.print("Shutter_Opened ");
Serial.println("No Rain - Shutter Open");
}
}
delay(1000); // 1-second delay
}