#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);
//----------------------------------VARS--------------------------------------
//Automatic Motor
const int LEDpin = 47;
const long onDuration = 10000; // OFF time for LED
const long offDuration = 14000; // ON time for LED
int LEDState =HIGH; // initial state of LED
long rememberTime=0; // this is used by the code
//R
const int Rpin = 51;
const long RonDelay = 200;
const long RoffDelay = 200;
int Rstate = HIGH;
long RrememberTime=0;
//automotor pb
const int butpin = 48;
const int motorpin = 50;
int state;
//Relay
const int relay0 = 25;
const int relay1 = 27;
const int relay2 = 29;
const int relay3 = 31;
const int relay4 = 33;
//pump
const int pump0 = 37;
const int pump1 = 53;
//Relay manual button
const int but0 = 36;
const int but1 = 38;
const int but2 = 40;
const int but3 = 42;
const int but4 = 44;
const int pb0 = 24;
const int pb1 = 26;
const int pb2 = 28;
const int pb3 = 30;
const int pb4 = 32;
int state0;
int state1;
int state2;
int state3;
int state4;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Moisture Sensor %");
pinMode(relay0,OUTPUT);
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay4,OUTPUT);
pinMode(pump0,OUTPUT);
pinMode(pump1,OUTPUT);
pinMode(but0,INPUT_PULLUP);
pinMode(but1,INPUT_PULLUP);
pinMode(but2,INPUT_PULLUP);
pinMode(but3,INPUT_PULLUP);
pinMode(but4,INPUT_PULLUP);
pinMode(pb0,OUTPUT);
pinMode(pb1,OUTPUT);
pinMode(pb2,OUTPUT);
pinMode(pb3,OUTPUT);
pinMode(pb4,OUTPUT);
pinMode(LEDpin,OUTPUT); // define LEDpin as output
digitalWrite(LEDpin, LEDState); // set initial state
pinMode(motorpin,OUTPUT);
pinMode(butpin,INPUT_PULLUP);
//R
pinMode(Rpin,OUTPUT);
digitalWrite(Rpin, Rstate);
}
void loop() {
//----------------------------------LCD---------------------------------------
lcd.setCursor(0, 1);
float ss0 = analogRead(A0);
float moisture0 = (ss0/1023)*100;
lcd.print("1)");
lcd.print(moisture0);
lcd.print(" ");
lcd.setCursor(0, 2);
float ss1 = analogRead(A1);
float moisture1 = (ss1/1023)*100;
lcd.print("2)");
lcd.print(moisture1);
lcd.print(" ");
lcd.setCursor(0, 3);
float ss2 = analogRead(A2);
float moisture2 = (ss2/1023)*100;
lcd.print("3)");
lcd.print(moisture2);
lcd.print(" ");
lcd.setCursor(11, 1);
float ss3 = analogRead(A3);
float moisture3 = (ss3/1023)*100;
lcd.print("4)");
lcd.print(moisture3);
lcd.print(" ");
lcd.setCursor(11, 2);
float ss4 = analogRead(A4);
float moisture4 = (ss4/1023)*100;
lcd.print("5)");
lcd.print(moisture4);
lcd.print(" ");
//----------------------------RELAY TO VALVE---------------------------------
static uint8_t tog=0;
static uint32_t oldtime=millis();
static uint8_t tog1=0;
static uint32_t oldtime1=millis();
static uint8_t tog2=0;
static uint32_t oldtime2=millis();
static uint8_t tog3=0;
static uint32_t oldtime3=millis();
static uint8_t tog4=0;
static uint32_t oldtime4=millis();
if(moisture0 <= 30.00){
digitalWrite(relay0,HIGH);
digitalWrite(pump0,HIGH);}
if ( (millis()-oldtime) >= 2000) {
oldtime = millis();
tog = ~tog;
if (tog)digitalWrite(relay0,LOW),
digitalWrite(pump0,LOW); }
if(moisture1 <= 30.00){
digitalWrite(relay1,HIGH);
digitalWrite(pump0,HIGH);}
if ( (millis()-oldtime1) >= 2000) {
oldtime1 = millis();
tog1 = ~tog1;
if (tog1)digitalWrite(relay1,LOW),
digitalWrite(pump0,LOW);
}
if(moisture2 <= 30.00){
digitalWrite(relay2,HIGH);
digitalWrite(pump0,HIGH);}
if ( (millis()-oldtime2) >= 2000) {
oldtime2 = millis();
tog2 = ~tog2;
if (tog2)digitalWrite(relay2,LOW),
digitalWrite(pump0,LOW);
}
if(moisture3 <= 30.00){
digitalWrite(relay3,HIGH);
digitalWrite(pump0,HIGH);}
if ( (millis()-oldtime3) >= 2000) {
oldtime3 = millis();
tog3 = ~tog3;
if (tog3)digitalWrite(relay3,LOW),
digitalWrite(pump0,LOW);
}
if(moisture4 <= 30.00){
digitalWrite(relay4,HIGH);
digitalWrite(pump0,HIGH);}
if ( (millis()-oldtime4) >= 2000) {
oldtime4 = millis();
tog4 = ~tog4;
if (tog4)digitalWrite(relay4,LOW),
digitalWrite(pump0,LOW);
}
//----------------------------PUSHBUTTON---------------------------------
state0 = digitalRead(but0);
if(state0 == HIGH){
digitalWrite(pb0,LOW); }
else{
digitalWrite(pb0,HIGH);
digitalWrite(pump0,HIGH);
}
state1 = digitalRead(but1);
if(state1 == HIGH){
digitalWrite(pb1,LOW);
}
else{
digitalWrite(pb1,HIGH);
digitalWrite(pump0,HIGH);
}
state2 = digitalRead(but2);
if(state2 == HIGH){
digitalWrite(pb2,LOW);
}
else{
digitalWrite(pb2,HIGH);
digitalWrite(pump0,HIGH);
}
state3 = digitalRead(but3);
if(state3 == HIGH){
digitalWrite(pb3,LOW);
}
else{
digitalWrite(pb3,HIGH);
digitalWrite(pump0,HIGH);
}
state4 = digitalRead(but4);
if(state4 == HIGH){
digitalWrite(pb4,LOW);
}
else{
digitalWrite(pb4,HIGH);
digitalWrite(pump0,HIGH);
}
//----------------------------TIMED ROTATION-------------------------------
//Autmatic motor
if( LEDState ==HIGH )
{
if( (millis()- rememberTime) > onDuration){
LEDState = LOW; // change the state of LED
rememberTime=millis(); // remember Current millis() time
}
}
else
{
if( (millis()- rememberTime) > offDuration){
LEDState =HIGH; // change the state of LED
rememberTime=millis(); // remember Current millis() time
}
}
digitalWrite(LEDpin,LEDState); // turn the LED ON or OFF
//R
digitalRead(LEDState);
if(LEDState == HIGH);
Rstate = HIGH;
if( Rstate == HIGH )
{
if( (millis()- RrememberTime) > RonDelay){
Rstate = LOW;
RrememberTime=millis();
}
}
else
{
if( (millis()- RrememberTime) > RoffDelay){
Rstate = HIGH;
RrememberTime=millis();
}
}
digitalWrite(Rpin,Rstate);
digitalRead(LEDState);
if(LEDState == LOW)
digitalWrite(Rpin,LOW);
//pb
state = digitalRead(butpin);
if(state == HIGH){
digitalWrite(motorpin,LOW);
}
else{
digitalWrite(motorpin,HIGH);
}
}