@salmanfaris
This is my messy code.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9, 2);
String content = "";
int Pulses = 3;
volatile int pulsecount;
unsigned long curr, prev, interval = 5000;
int led = 11;
long count = 0;
unsigned long onCall_prev_time, onCall_interval = 15000;
unsigned long timer;
bool ledFlag = 0;
bool smsFlag = 0;
bool ackFlag = 0;
bool ackFlag_1 = 0;
bool recSmsFlag = 0;
int statusAck = 0;
bool onCall_flag = 0;
int c = 0;
bool terminate_flag = 0;
bool terminate_flag_1 = 0;
String number_1 = "YYxxxxxxxxxx";
String number_2 = "YYxxxxxxxxxx";
String number_3 = "YYxxxxxxxxxx";
String number_4 = "YYxxxxxxxxxx";
String test = "YYxxxxxxxxxx";
String userName;
void setup() {
pinMode(led, OUTPUT);
pinMode(Pulses, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Pulses), CountPulses, FALLING);
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("Initializing...");
delay(500);
Serial.println("Watchdog Enabled ");
mySerial.println("AT+IPR=9600");
updateSerial();
}
void updateSerial()
{
detachInterrupt(CountPulses);
delay(500);
while (Serial.available())
{
mySerial.write(Serial.read());
}
while (mySerial.available())
{
Serial.write(mySerial.read());
}
}
void recSerial()
{
String msg;
detachInterrupt(CountPulses);
delay(500);
while (Serial.available())
{
mySerial.write(Serial.read());
}
while (mySerial.available())
{
detachInterrupt(CountPulses);
msg = mySerial.readString();
processMsg(msg);
}
}
void loop() {
Serial.println("Loop strated----++++---++");
pulsecount = 0;
interrupts();
delay(1000);
detachInterrupt(CountPulses);
long flowRate;
flowRate = (pulsecount * 2.22 * 60);
Serial.print("Flow rate=");
Serial.print(flowRate);
Serial.println("mL/minute");
recSerial();
digitalWrite(led, ledFlag);
if (ackFlag_1) {
Serial.println("Acknowledge Received-----------------------");
content = "ACK received from " + userName +" paused all notifications ";
smsSend_5(content);
ackFlag_1 = false;
}
if (terminate_flag_1) {
content = "GOT 'TERMINATE' From "+userName;
smsSend_5(content);
terminate_flag_1 = false;
}
if (onCall_flag) {
Serial.println(c++);
if (c >= 15) {
Serial.println("Calling Event Completed");
mySerial.println("ATH");
updateSerial();
onCall_flag = false;
c = 0;
}
}
if (statusAck) {
if (pulsecount != 0) {
smsSend_5("No problem. it's working perfectly!");
statusAck = 0;
}
else if (pulsecount == 0) {
smsSend_5("It's Not working!!!!");
statusAck = 0;
}
}
if (!recSmsFlag) {
Serial.println("Setting into Receive Mode");
recMode();
recSmsFlag = true;
}
if (flowRate > 1) {
Serial.println("Reseted all countors for new event ---++");
count = 0;
prev = 0;
ackFlag = false;
smsFlag = false;
terminate_flag = false;
ledFlag = 1;
}
if (flowRate == 0.00) {
curr = millis();
Serial.println("flowrate is Zero!!");
ledFlag = 0;
Serial.println("Reseted Watchdog");
if (curr - prev >= 1000) {
prev = curr;
Serial.print(count++);
Serial.println(" Seconds");
if (count == 30 && ackFlag == 0) {
Serial.println("ALERT 1 - FLow not working for 30 Seconds");
smsSend_5("Flow is Zero about 30 Seconds!!!");
smsFlag = true;
Serial.println("Reseted Watchdog");
}
if (count == 40 && ackFlag == 0) {
Serial.println("ALERT 1 - FLow not working for 40 Seconds");
smsFlag = true;
makeCall(test);
onCall_flag = 1;
Serial.println("Reseted Watchdog");
}
if (count == 50 && ackFlag == 0) {
Serial.println("ALERT 1 - FLow not working for 50 Seconds");
smsSend_5("Flow is Zero about 30 Seconds!!!");
smsFlag = true;
Serial.println("Reseted Watchdog");
}
if (count == 60 && ackFlag == 0) {
Serial.println("ALERT 1 - FLow not working for 60 Seconds");
smsSend_5("Flow is Zero about 30 Seconds!!!");
smsFlag = true;
Serial.println("Reseted Watchdog");
}
if (count == 90 && ackFlag == 0) {
Serial.println("Not working for 1.5 minutes");
makeCall(test);
Serial.println("Reseted Watchdog");
}
if (count == 150 && ackFlag == 0) {
Serial.println("Not working for 2.5 minutes");
smsSend_5("Flow is Zero about 2.5 Minutes!!!");
Serial.println("Reseted Watchdog");
}
if (count == 210 && ackFlag == 0) {
Serial.println("Not working for 3.5 minutes");
smsSend_5("Flow is Zero about 3.5 Minutes!!!");
Serial.println("Reseted Watchdog");
}
if (count == 270 && ackFlag == 0) {
Serial.println("Not working for 4.5 minutes");
smsSend_5("Flow is Zero about 4.5 Minutes!!!");
}
if (count == 180 && terminate_flag == 0) {
Serial.println("just a reminder");
smsSend_5("Blower is not working more than 8 minutes");
}
if (count >= 600 && terminate_flag == 0) {
Serial.println("DANGER!!!");
smsSend_5("DANGER!! Flow is Not working more than 10 Minutes!!!");
count = 0;
}
}
}
}
void CountPulses()
{
pulsecount++;
}
void recMode(){
Serial.println("Setting Recieve mode");
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CNMI=1,2,0,0,0");
updateSerial();
}
void smsSend_1(String content) {
detachInterrupt(CountPulses);
Serial.println("SMS sending");
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");
updateSerial();
mySerial.print(content);
updateSerial();
mySerial.write(26);
Serial.println("sent!!");
recSmsFlag = false;
}
void smsSend_2(String content) {
detachInterrupt(CountPulses);
Serial.println("SMS sending");
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");
updateSerial();
mySerial.print(content);
updateSerial();
mySerial.write(26);
Serial.println("sent!!");
recSmsFlag = false;
}
void smsSend_3(String content) {
detachInterrupt(CountPulses);
Serial.println("SMS sending");
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");
updateSerial();
mySerial.print(content);
updateSerial();
mySerial.write(26);
Serial.println("sent!!");
recSmsFlag = false;
}
void smsSend_4(String content) {
detachInterrupt(CountPulses);
Serial.println("SMS sending");
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");
updateSerial();
mySerial.print(content);
updateSerial();
mySerial.write(26);
Serial.println("sent!!");
recSmsFlag = false;
}
void smsSend_5(String content) {
detachInterrupt(CountPulses);
Serial.println("SMS sending");
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");
updateSerial();
mySerial.print(content);
updateSerial();
mySerial.write(26);
Serial.println("sent!!");
recSmsFlag = false;
}
void makeCall(String number1) {
detachInterrupt(CountPulses);
recSmsFlag = 0;
mySerial.print (F("ATD"));
mySerial.print (number1);
mySerial.print (F(";\r\n"));
updateSerial();
onCall_prev_time = millis();
Serial.print("----Calling to ");
Serial.println(number1);
onCall_flag = true;
}
String getName(String nameOfuser) {
String user;
detachInterrupt(CountPulses);
Serial.print("Get Name is Running ----------");
if(nameOfuser.indexOf(number_1)>0){
user = "Rashad";
return user;
}
else if(nameOfuser.indexOf(number_2)>0){
user = "Hashim";
return user;
}
else if(nameOfuser.indexOf(number_3)>0){
user = "Rasil";
return user;
}
else if(nameOfuser.indexOf(number_4)>0){
user = "Anas";
return user;
}
else if(nameOfuser.indexOf(test)>0){
user="Rafi";
return user;
}
else{
user = "Unknown";
return user;
}
}
void processMsg(String msg){
Serial.print(msg);
detachInterrupt(CountPulses);
Serial.println("process started!!!!!----------");
digitalWrite(11,1);
delay(500);
digitalWrite(11,0);
if ((msg.indexOf("Stop")>0)) {
Serial.print("Got ACK from------ ");
Serial.println("Reseted Watchdog");
userName = getName(msg);
ackFlag_1 = 1;
ackFlag = 1;
}
else if ((msg.indexOf("Check")>0)) {
Serial.println("Status Test MSG Received --------");
userName = getName(msg);
statusAck = 1;
}
else if ((msg.indexOf("Terminate") > 0)) {
userName = getName(msg);
Serial.print("Terminated all notification until next event by ");
Serial.println("Reseted Watchdog");
terminate_flag_1 = 1;
terminate_flag = 1;
}
else{
Serial.println("Not a admin commend ");
}
}