#define redLed 5
#define greenLed 6
#define buzzer A1
#define button  2
#define rainSensor 0

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

unsigned int rain;
bool enable;

void setup() 
{
  lcd.init();                  
  lcd.backlight();
  bootingScreen();
  pinMode(redLed,OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(buzzer,OUTPUT);
  pinMode(button, INPUT_PULLUP);
  enable=HIGH;
  delay(2000);
}

void loop() 
{
  rain= map(analogRead(rainSensor),0,1024,0,100);
  
  if(rain>50 & enable)
  {
    warning();
  }
  else
  {
    digitalWrite(greenLed,HIGH);
    digitalWrite(redLed,LOW);
    digitalWrite(buzzer,LOW);
    homeScreen();
  }

  if(digitalRead(button)==LOW)
  {
    enable=!enable;
    delay(1000);
  }
}

void bootingScreen()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" RAIN DETECTOR "); 
  lcd.setCursor(0,1);
  lcd.print("WARMING UP....."); 
  delay(1000);
}

void homeScreen()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("   RAIN ALERT   "); 
  lcd.setCursor(0,1);
  lcd.print("RAIN LEVEL:"); 
  lcd.setCursor(12,1);
  lcd.print(rain); 
  lcd.setCursor(15,1);
  lcd.print("%"); 
  delay(500);
}

void warning()
{
  digitalWrite(greenLed,LOW);
  digitalWrite(redLed,HIGH);
  digitalWrite(buzzer,HIGH);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("   !!WARNING!!  "); 
  lcd.setCursor(0,1);
  lcd.print(" RAIN DETECTED  "); 
  delay(1000);
}
    
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
bz1:1
bz1:2
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
pot1:GND
pot1:SIG
pot1:VCC
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r