Hello guys,
I have created this sketch for my home alarm module. Right now everything is working as expected, but I am trying to add a modification on it that would detect a power outage and send me a message by Blynk and Telegram, but having issue with the section of the code that read that input change state. I would like to receive a one time message when that pin goes from high to low, and then receive another message when it goes from low to high, and so on as the ac power would go out and resume.
Right now the way it react, it only send me a message when that input goes high to low in a very short period of time (like 1 seconds state change), similar like if I would press a push button. I know it have to do with the way that I wrote the state change formula, but cannot figure out how to write that section correctly.
The section that need to be corrected is part of the myTimerEvent2 loop.
Regards,
Serge L
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "********"
#define BLYNK_TEMPLATE_NAME "Home Alarm"
#define BLYNK_AUTH_TOKEN "******************"
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <BlynkSimpleEsp32.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
char ssid[] = "*********";
char pass[] = "********";
const int Pir = 4;
int armstate=0;
int armNew;
int armOld=1;
int Vsensstate=0;
int Vsensnew;
int Vsensold=1;
int state = 0;
int awayHomeMode = 0;
int armpin = 34;
int bluled = 18;
int redled = 19;
int horn= 22;
int hornrst= 23;
int Vsens = 26;
int aclight = 27;
#define BOTtoken "*********************"
#define CHAT_ID "**************"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
void sensor1()
{
int Pir_data=digitalRead(Pir);
Blynk.virtualWrite(V2, Pir_data);
}
BlynkTimer timer;
void setup()
{
pinMode(Pir, INPUT);
pinMode(armpin, INPUT);
pinMode(redled, OUTPUT);
pinMode(bluled, OUTPUT);
pinMode(horn, OUTPUT);
pinMode(hornrst, OUTPUT);
pinMode(Vsens, INPUT);
pinMode(aclight, OUTPUT);
digitalWrite(redled, LOW);
digitalWrite(bluled, HIGH);
digitalWrite(horn, LOW);
digitalWrite(hornrst, LOW);
digitalWrite(aclight, LOW);
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
bot.sendMessage(CHAT_ID, "YOUR MAIN SYSTEM HAVE JUST REBOOTED", "");
timer.setInterval(400L, myTimerEvent1);
timer.setInterval(500L, myTimerEvent2);
timer.setInterval(50L, myTimerEvent3);
timer.setInterval(600L, sensor1);
}
BLYNK_CONNECTED()
{
Blynk.syncVirtual(V0);
Blynk.syncVirtual(V4);
}
BLYNK_WRITE(V0)
{
awayHomeMode = param.asInt();
if (awayHomeMode == 1)
{
Serial.println("AWAY MODE, ALARM ACTIVE");
Blynk.virtualWrite(V1, " AWAY MODE, ALARM ACTIVE");
digitalWrite(redled, HIGH);
digitalWrite(bluled, LOW);
}
else
{
Serial.println("HOME MODE, ALARM DISABLE");
Blynk.virtualWrite(V1, "HOME MODE, ALARM DISABLE");
digitalWrite(redled, LOW);
digitalWrite(bluled, HIGH);
digitalWrite(horn, LOW);
delay(500);
digitalWrite(hornrst, HIGH);
delay(500);
digitalWrite(hornrst, LOW);
}
}
BLYNK_WRITE(V4)
{
int value = param.asInt();
Serial.print("The AC light level is ");
Serial.println(value);
analogWrite(aclight,value);
}
void myTimerEvent1()
{
sendData();
}
void sendData()
{
if (awayHomeMode == 1)
{
state = digitalRead(Pir);
if (state == HIGH)
{
Serial.println("MAIN ALARM TRIGGERED");
digitalWrite(horn, HIGH);
Blynk.virtualWrite(V1, "---MAIN ALARM TRIGGERED---");
Blynk.logEvent("MAIN ALARM TRIGGERED");
bot.sendMessage(CHAT_ID, "ALARM TRIGGERED IN MAIN LIVING ROOR AREA", "");
delay(500);
digitalWrite(horn, HIGH);
delay(3000);
digitalWrite(horn, LOW);
}
}
}
void myTimerEvent2()
{
Vsensnew=digitalRead(Vsens);
if(Vsensold==0 && Vsensnew==1)
{
if (Vsensstate==0)
{
Blynk.virtualWrite(V1, "AC POWER DOWN UPS BACKUP");
bot.sendMessage(CHAT_ID, "AC POWER DOWN AT THE UPS
BACKUP", "");
delay(1000);
Vsensstate=1;
}
else
{
Blynk.virtualWrite(V1, "AC POWER RESUMED ON UPS");
bot.sendMessage(CHAT_ID, "AC POWER HAVE RESUMED AT THE
UPS", "");
delay(1000);
Vsensstate=0;
}
}
Vsensold=Vsensnew;
}
void myTimerEvent3()
{
armNew=digitalRead(armpin);
if(armOld==0 && armNew==1)
{
if (armstate==0)
{
Blynk.virtualWrite(V1, "ALARM ARMED FROM HOME");
Blynk.virtualWrite(V3, 1);
bot.sendMessage(CHAT_ID, "ALARM WAS ARMED FROM HOME",
"");
delay(1000);
armstate=1;
}
else
{
Blynk.virtualWrite(V1, "ALARM CANCEL FROM HOME");
Blynk.virtualWrite(V3, 0);
bot.sendMessage(CHAT_ID, "ALARM WAS CANCEL FROM HOME",
"");
delay(1000);
armstate=0;
}
}
armOld=armNew;
}
void loop()
{
Blynk.run(); // Run Blynk
timer.run(); // Run BlynkTimer
}