// 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[] = "+60179487311";
char phone_no[] = "+60120000015";
#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 ROOM..");
//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 in danger level");
delay(500);
Serial.println(char(26));
}
void SendMessage1()
{
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("River water level has reach 50%");
delay(500);
Serial.println(char(26));
}
void SendMessage2()
{
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("River water level reach dangerous level. Please evacuate from the place");
delay(500);
Serial.println(char(26));
}