#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int Time = 1; // Set time in minutes default time is 1min int threshold = 20; // set threshold in percentage 80, 70, 60, 50, 40, 30, 20 only. default 20, int i; int x; int y; int z; int start; int calibrateValue; const int calibrateBTN = A1 ; const int input = A0; const int motor = 7; boolean calibration = false; boolean rescue = false; void setup() { Serial.begin(9600); pinMode(input, INPUT); pinMode(calibrateBTN, INPUT); pinMode(motor, OUTPUT); digitalWrite(calibrateBTN, HIGH); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("Solar Powered"); lcd.setCursor(0,1); lcd.print("Irrigation System"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Subscribe My Chan-"); lcd.setCursor(0,1); lcd.print("-nel AviPrink"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Pour water and"); lcd.setCursor(0,1); lcd.print("press calibrate"); while(!calibration) { if(digitalRead(calibrateBTN)==LOW) { calibrateValue = analogRead(input); x = 1023 - calibrateValue; x = x/10; Serial.print("Difference = "); Serial.println(x); Serial.print("Calibration Value = "); Serial.println(calibrateValue); delay(500); lcd.clear(); lcd.setCursor(0,0); lcd.print("Calibration done"); lcd.setCursor(0,1); lcd.print("successfully !!!"); calibration = true; delay(2000); } } } void loop() { if(analogRead(input)<= calibrateValue) { delay(500); lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 100%"); } if(analogRead(input) > calibrateValue && analogRead(input) <= calibrateValue+x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 90 to 99%"); } if(analogRead(input) > calibrateValue+x && analogRead(input) <= calibrateValue+2*x ) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 80 to 90%"); start = 80; } if(analogRead(input) > calibrateValue+2*x && analogRead(input) <= calibrateValue+3*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 70 to 80%"); start = 70; } if(analogRead(input) > calibrateValue+3*x && analogRead(input) <= calibrateValue+4*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 60 to 70%"); start = 60; } if(analogRead(input) > calibrateValue+4*x && analogRead(input) <= calibrateValue+5*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 50 to 60%"); start = 50; } if(analogRead(input) > calibrateValue+5*x && analogRead(input) <= calibrateValue+6*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 40 to 50%"); start = 40; } if(analogRead(input) > calibrateValue+6*x && analogRead(input) <= calibrateValue+7*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 30 to 40%"); start = 30; } if(analogRead(input) > calibrateValue+7*x && analogRead(input) <= calibrateValue+8*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 20 to 30%"); start = 20; } if(analogRead(input) > calibrateValue+8*x && analogRead(input) <= calibrateValue+9*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: 10 to 20%"); start = 10; } if(analogRead(input) > calibrateValue+9*x && analogRead(input) <= calibrateValue+10*x) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Soil Moisture"); lcd.setCursor(0,1); lcd.print("Level: < 10%"); rescue = true; } if(start == threshold || rescue) { y = Time; digitalWrite(motor, HIGH); Time = Time*60; z = Time; for(i=0; i