i am making a code for automatic irrigation system and want to declare global loop for every function so that if any condition detected the programe stops the further execution and returns to that function but i have a problem. here is the code
#include<Sim800L.h>
#include<LiquidCrystal.h>
#include<SoftwareSerial.h>
String str = "";
Sim800L Sim800L;
SoftwareSerial myserial(50, 51);
#include <dht.h>
#define dataPin 27
dht DHT;
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);
const int SoMS1 = 22;
const int SoMS2 = 23;
const int SoMS3 = 24;
const int SoMS4 = 25;
const int RDpS = 26;
const int led1 = 28;
const int led2 = 29;
const int led3 = 30;
const int led4 = 31;
const int buz = 32;
int mtr1 = 33;
int mtr2 = 34;
int mtr3 = 35;
int mtr4 = 36;
const int lvled1 = 37;
const int lvled2 = 38;
const int lvled3 = 39;
const int lvled4 = 40;
const int lvled5 = 41;
int level1 = A1;
int level2 = A2;
int level3 = A3;
int level4 = A4;
int level5 = A5;
int motor = 5;
int n;
int o;
int p;
int q;
int s;
int r; //Water Pump status flag
int m = 0; //water Pump flag
int z = 121; // Adjust this value from 100 to 1023 if your circuit do not show correct value.
bool i = 1, j = 1;
bool a = 1, b = 1, c = 1, d = 1, e = 1, f = 1, g = 1, h = 1; //these are the flags to store sent msg termination for detection of conditions.
int soil1();
int soil2();
int soil3();
int soil4();
int rain();
void setup()
{
myserial.begin(9600);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Water Irrigaton");
lcd.setCursor(2, 1);
delay(2000);
lcd.clear();
lcd.print("UCET UOS");
lcd.setCursor(0, 1);
lcd.print("Welcomes You");
delay(2000);
gsmInit();
lcd.clear();
lcd.print("System Ready");
delay(1000);
lcd.clear();
lcd.print("SMART IRRIGATION");
lcd.setCursor(2, 1);
lcd.print("...SYSTEM...");
delay(2000);
lcd.clear();
lcd.print("PRESENTED BY");
lcd.setCursor(2, 1);
lcd.print("BSC ELECTRICAL");
delay(2000);
lcd.clear();
lcd.print("SUPERVISOR");
lcd.setCursor(2, 1);
lcd.print("*..ENGR.ERUM..*");
delay(2000);
lcd.clear();
lcd.print("GROUP MEMBERS");
lcd.setCursor(2, 1);
lcd.print("---------------");
delay(2000);
lcd.clear();
lcd.print("IKRAM UL HAQ");
lcd.setCursor(2, 1);
lcd.print("BEEF15M003");
delay(2000);
lcd.clear();
lcd.print("BEHZAD ASGHAR");
lcd.setCursor(2, 1);
lcd.print("BEEF15E026");
delay(2000);
lcd.clear();
lcd.print("TALHA HAIDER");
lcd.setCursor(2, 1);
lcd.print("BEEF15E039");
delay(2000);
lcd.clear();
pinMode(SoMS1, INPUT_PULLUP);
pinMode(SoMS2, INPUT_PULLUP);
pinMode(SoMS3, INPUT_PULLUP);
pinMode(SoMS4, INPUT_PULLUP);
pinMode(RDpS, INPUT_PULLUP);
pinMode(mtr1, OUTPUT);
pinMode(mtr2, OUTPUT);
pinMode(mtr3, OUTPUT);
pinMode(mtr4, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(lvled1, OUTPUT);
pinMode(lvled2, OUTPUT);
pinMode(lvled3, OUTPUT);
pinMode(lvled4, OUTPUT);
pinMode(lvled5, OUTPUT);
pinMode(level1, INPUT);
pinMode(level2, INPUT);
pinMode(level3, INPUT);
pinMode(level4, INPUT);
pinMode(level5, INPUT);
pinMode(motor, OUTPUT);
digitalWrite(mtr1, HIGH);
digitalWrite(mtr2, HIGH);
digitalWrite(mtr3, HIGH);
digitalWrite(mtr4, HIGH);
}
void loop()
{
{
soil1();
soil2();
soil3();
soil4();
rain();
}
// this is the setup of soil moisture sensors
void soil1()
{
if ((digitalRead(SoMS1) == HIGH)&&(digitalRead(RDpS)==HIGH))
{ digitalWrite(led1, HIGH);
digitalWrite(mtr1, LOW);
lcd.print("LOW MOISTURE1");
lcd.setCursor(2, 1);
lcd.print("MOTOR1 ON");
delay(1000);
lcd.clear();
sendSMS("LOW SOIL MOISTURE1 MOTOR 1 ON"); a = 0 ; b = 1;
}
else if ((digitalRead(SoMS1) == LOW)&&(digitalRead(RDpS)==HIGH))
{ digitalWrite(led1, LOW);
digitalWrite(mtr1, HIGH);
lcd.print("NORMAL MOISTURE1");
lcd.setCursor(2, 1);
lcd.print("MOTOR1 OFF");
delay(1000);
lcd.clear();
}
if ((digitalRead(SoMS1) == LOW)&&(digitalRead(RDpS)==LOW))
{
digitalWrite(led1, LOW); a = 1;
digitalWrite(mtr1, HIGH);
lcd.print("HIGH MOISTURE1");
lcd.setCursor(2, 1);
lcd.print("MOTOR1 OFF");
delay(1000);
lcd.clear();
sendSMS("NORMAL MOISTURE MOTOR1 OFF"); a = 1; b = 0;
}
else if ((digitalRead(SoMS1) == HIGH)&&(digitalRead(RDpS)==LOW))
{ digitalWrite(led1, LOW);
digitalWrite(mtr1, HIGH);
lcd.print("NORMAL MOISTURE1");
lcd.setCursor(2, 1);
lcd.print("MOTOR1 OFF");
delay(1000);
lcd.clear();
}
}
void soil2()
{
if ((digitalRead(SoMS2) == HIGH)&&(digitalRead(RDpS)==HIGH))
{ digitalWrite(led2, HIGH);
digitalWrite(mtr2, LOW);
lcd.print("LOW MOISTURE2");
lcd.setCursor(2, 1);
lcd.print("MOTOR2 ON");
delay(1000);
lcd.clear();
sendSMS("LOW SOIL MOISTURE2 MOTOR 2 ON"); c = 0; d = 1;
}
else if ((digitalRead(SoMS2) == LOW)&&(digitalRead(RDpS)==HIGH))
{
digitalWrite(led2, LOW);
digitalWrite(mtr2, HIGH);
lcd.print("HIGH MOISTURE2");
lcd.setCursor(2, 1);
lcd.print("MOTOR2 OFF");
delay(1000);
lcd.clear();
}
if ((digitalRead(SoMS2) == LOW)&&(digitalRead(RDpS)==LOW))
{
digitalWrite(led2, LOW);
digitalWrite(mtr2, HIGH);
lcd.print("HIGH MOISTURE2");
lcd.setCursor(2, 1);
lcd.print("MOTOR2 OFF");
delay(1000);
lcd.clear();
sendSMS("NORMAL SOIL MOISTURE2 MOTOR 2 OFF"); c = 1; d = 0;
}
else if ((digitalRead(SoMS2) == HIGH)&&(digitalRead(RDpS)==LOW))
{
digitalWrite(led2, LOW);
digitalWrite(mtr2, HIGH);
lcd.print("HIGH MOISTURE2");
lcd.setCursor(2, 1);
lcd.print("MOTOR2 OFF");
delay(1000);
lcd.clear();
}
}
void soil3()
{
if ((digitalRead(SoMS3) == HIGH)&&(digitalRead(RDpS)==HIGH))
{ digitalWrite(led3, HIGH);
digitalWrite(mtr3, LOW);
lcd.print("LOW MOISTURE3");
lcd.setCursor(2, 1);
lcd.print("MOTOR3 ON");
delay(1000);
lcd.clear();
sendSMS("LOW SOIL MOISTURE3 MOTOR 3 ON"); e = 0; f = 1;
}
else if ((digitalRead(SoMS3) == LOW)&&(digitalRead(RDpS)==HIGH))
{
digitalWrite(led3, LOW);
digitalWrite(mtr3, HIGH);
lcd.print("HIGH MOISTURE3");
lcd.setCursor(2, 1);
lcd.print("MOTOR3 OFF");
delay(1000);
lcd.clear();
}
if ((digitalRead(SoMS3) == LOW)&& (digitalRead(RDpS)==LOW))
{
digitalWrite(led3, LOW);
digitalWrite(mtr3, HIGH);
lcd.print("HIGH MOISTURE3");
lcd.setCursor(2, 1);
lcd.print("MOTOR3 OFF");
delay(1000);
lcd.clear();
sendSMS("NORMAL SOIL MOISTURE3 MOTOR 3 OFF"); e = 1; f = 0;
}
else if ((digitalRead(SoMS3) == HIGH)&&(digitalRead(RDpS)==LOW))
{
digitalWrite(led3, LOW);
digitalWrite(mtr3, HIGH);
lcd.print("HIGH MOISTURE3");
lcd.setCursor(2, 1);
lcd.print("MOTOR3 OFF");
delay(1000);
lcd.clear();
}
}
void soil4 ()
{
if ((digitalRead(SoMS4) == HIGH)&&(digitalRead(RDpS)==HIGH))
{ digitalWrite(led4, HIGH);
digitalWrite(mtr4, LOW);
lcd.print("LOW MOISTURE4");
lcd.setCursor(2, 1);
lcd.print("MOTOR4 ON");
delay(1000);
lcd.clear();
sendSMS("LOW SOIL MOISTURE4 MOTOR 4 ON"); g = 0; h = 1;
}
else if ((digitalRead(SoMS4) == LOW)&&(digitalRead(RDpS)==HIGH))
{
digitalWrite(led4, LOW);
digitalWrite(mtr4, HIGH);
lcd.print("HIGH MOISTURE4");
lcd.setCursor(2, 1);
lcd.print("MOTOR4 OFF");
delay(1000);
lcd.clear();
}
if ((digitalRead(SoMS4) == LOW)&&(digitalRead(RDpS)==LOW))
{
digitalWrite(led4, LOW);
digitalWrite(mtr4, HIGH);
lcd.print("HIGH MOISTURE4");
lcd.setCursor(2, 1);
lcd.print("MOTOR4 OFF");
delay(1000);
lcd.clear();
sendSMS("NORMAL SOIL MOISTURE4 MOTOR 4 OFF"); g = 1; h = 0;
}
else if ((digitalRead(SoMS4) == HIGH)&&(digitalRead(RDpS)==LOW))
{
digitalWrite(led4, LOW);
digitalWrite(mtr4, HIGH);
lcd.print("HIGH MOISTURE4");
lcd.setCursor(2, 1);
lcd.print("MOTOR4 OFF");
delay(1000);
lcd.clear();
}
}
void rain()
{
if (digitalRead(RDpS) == LOW)// low = high
{ digitalWrite(led1, LOW);
digitalWrite(mtr1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(mtr2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(mtr3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(mtr4, HIGH);
digitalWrite(buz, HIGH);
lcd.print("ITS RAINING");
delay(1000);
lcd.clear();
sendSMS("ITS RAINING"); i = 0; j = 1;
}
if (digitalRead(RDpS) == HIGH)
{
lcd.print("NO RAIN");
delay (1000);
lcd.clear();
sendSMS("NO RAIN DETECTED"); i = 1; j = 0;
}
}