// waterlevel
// https://forum.arduino.cc/t/why-the-river-water-level-has-reach-50-sending-too-many-message-but-others-send-correctly-one-time-but-only-this-message-sending-too-many-time/1064934/4
// to be deleted 2023-06
#define trigPin1 A0
#define echoPin1 A1
long duration, distance;
char phone_no1[] = "water level checking";
char phone_no[] ="water level is full reach or not";
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.begin(16, 2);
lcd.setCursor(0, 1);
lcd.print("FLOOD DETECTION CONTROL tank..");
//for (int positionCounter = 0; positionCounter < 29; positionCounter++)
//{
// lcd.scrollDisplayLeft();
// delay(500);
//}
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
}
enum State {OK, INFO, WARNING, ALARM};
State state, previousState;
long getDistanceHC()
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration = pulseIn(echoPin1, HIGH);
return duration * 0.034 / 2;
}
long getDistanceADC()
{
int adc = analogRead(A1);
int value = map(adc, 0, 1023, 0, 20);
return value; // measure with poti
}
void loop()
{
//distance = getDistanceHC(); // a real function
distance = getDistanceADC(); // simulated with a potentiometer
// Serial.println(distance); // only to debug in wokwi
lcd.setCursor(0, 0);
lcd.print("WATER LEVEL:");
lcd.print(distance);
delay(500);
lcd.clear();
// evaluate state
switch (distance)
{
case 0 ... 3:
state = ALARM;
if (previousState != state) SendMessage(); // only when state has changed
break;
case 4 ... 10:
state = WARNING;
if (previousState != state) SendMessage2();
break;
case 11 ... 15 :
state = INFO;
if (previousState != state) SendMessage1();
break;
default : // larger 15
state = OK;
}
previousState = state;
}
void SendMessage()
{
Serial.println("AT+CMGF=1");
delay(2000);
Serial.print("AT+CSCA=");
Serial.print(phone_no);
Serial.write(0x22);
Serial.write(0x0D);
Serial.write(0x0A);
delay(3000);
Serial.print("AT + CMGS = ");
Serial.print(phone_no1);
Serial.write(0x22);
Serial.write(0x0D);
Serial.write(0x0A);
delay(3000);
Serial.print("water level is 50% reach");
delay(500);
Serial.println(char(26));
}
void SendMessage1()
{
Serial.println("AT+CMGF=2");
delay(2000);
Serial.print("AT+CSCA= ");
Serial.print(phone_no);
Serial.write(0x22);
Serial.write(0x0D);
Serial.write(0x0A);
delay(3000);
Serial.print("AT + CMGS = ");
Serial.print(phone_no1);
Serial.write(0x22);
Serial.write(0x0D);
Serial.write(0x0A);
delay(3000);
Serial.print("tank water level has reach 50%");
delay(500);
Serial.println(char(26));
}
void SendMessage2()
{
Serial.println("AT+CMGF=3");
delay(2000);
Serial.print("AT+CSCA= ");
Serial.print(phone_no);
Serial.write(0x22);
Serial.write(0x0D);
Serial.write(0x0A);
delay(3000);
Serial.print("AT + CMGS = ");
Serial.print(phone_no1);
Serial.write(0x22);
Serial.write(0x0D);
Serial.write(0x0A);
delay(3000);
Serial.print("tank water level reach dangerous level. Please evacuate from the place");
delay(500);
Serial.println(char(26));
}
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
pot1:VCC
pot1:SIG
pot1:GND