this is my code in beta version
//Librerie e definizione hardware
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <BlynkSimpleEthernet.h>
#include <SoftwareSerial.h>
#define SIM800_TX_PIN 8 //SIM800 TX al pin D8 di to Arduino
#define SIM800_RX_PIN 7 //SIM800 TX al pin D7 di to Arduino
SoftwareSerial mySerial(SIM800_TX_PIN, SIM800_RX_PIN); //Creazione software serial per SIM800L
#define reed 2
#define tamper 3
#define led_1 9
#define led_2 6
#define W5100_CS 10
#define SDCARD_CS 4
SimpleTimer timer;
WidgetTerminal terminal (V30);
//per app blynk con terminal input
BLYNK_CONNECTED() {
Blynk.syncVirtual(V30);
}
BLYNK_WRITE(V30)
{
if (String("1111") == param.asStr()) {
terminal.println("Password Accettata!") ;
Blynk.notify("Attenzione, password impianto accettata, stato impianto OFF");
digitalWrite (2, LOW);
} else {
terminal.print("Password Errata!!!!!");
Blynk.notify("Attenzione, tentativo di violazione impianto allarme !!!");
Blynk.email("xxxx@gmail.com", "Accesso errato , forzatura impianto allarme!!!");
terminal.write(param.getBuffer(), param.getLength());
terminal.println();
digitalWrite (2,HIGH);
}
terminal.flush();
}
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
//sync time ntp
EthernetUDP Udp;
IPAddress server_ip (139, 59, 206, 133); //cloud blynk
// Mac address should be different for each device in your LAN
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress arduino_ip ( 192, 168, 188, 98);
IPAddress dns_ip ( 8, 8, 8, 8);
IPAddress gateway_ip ( 192, 168, 188, 001);
IPAddress subnet_mask(255, 255, 255, 000);
EthernetServer server = EthernetServer(80);
//variabili lettura sms in entrata
char stringa[100];
char comando[31] = {0};
// variabili antifurto
bool stato_imp = false;
volatile int stato_reed = LOW;
volatile int stato_tamper = LOW;
String number = "xxxxxxxxxxx";
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
delay(10000); // attendo che il GSM abbia agganciato la linea
mySerial.print("AT+CMGF=1\r\n"); // imposta il formato del messaggio SMS come testo
delay(1000);
mySerial.print("AT+CNMI=1,2,0,0,0\r\n"); // specifica come devono essere gestiti i messaggi SMS appena arrivati
delay(1000);
pinMode(reed, INPUT);
attachInterrupt(digitalPinToInterrupt(reed), line_reed, FALLING ); // FALLING = da alto a basso.
pinMode(tamper, INPUT);
attachInterrupt(digitalPinToInterrupt(tamper), line_tamper, FALLING ); // FALLING = da alto a basso.
pinMode(led_1, OUTPUT);
digitalWrite(led_1, LOW);
pinMode(led_2, OUTPUT);
digitalWrite(led_2, LOW);
Blynk.begin(auth, "blynk-cloud.com", 8080, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);
}
void loop()
{
lettura_sms();
antifurto();
Blynk.run();
timer.run();
}
void line_reed()
{
stato_reed = HIGH;
}
void line_tamper()
{
stato_tamper = HIGH;
}
void antifurto() {
if (stato_imp = true) { // flag impianto inserito
number1inserito();
number2inserito();
digitalWrite(led_1, HIGH); // accende led impianto inserito
if (stato_reed == HIGH) { // contatto porta aperto
number1allarme();
number2allarme();
digitalWrite(led_2, HIGH); // accende led segnalazione allarme
}
if (stato_tamper == HIGH) { // linea tamper aperta
number1allarme();
number2allarme();
digitalWrite(led_2, HIGH); // accende led segnalazione allarme
}
}
else if (stato_imp = false) { // flag impianto disinserito
number1disinserito();
number2disinserito();
digitalWrite(led_1, LOW); // spengne led a impianto disinserito
}
}
void number1allarme()
{
Serial.println("OK");
delay(1000);
Serial.print("AT+CMGF=1\r\n");
delay(500);
Serial.print("AT+CMGS=\"");
Serial.print("+39xxxxxxxxxx");
Serial.print("\"\r\n");
delay(2000);
Serial.print("Attenzione, centrale in allarme");
Serial.write(0x1A);
delay(1000);
}
void number2allarme()
{
Serial.println("OK");
delay(1000);
Serial.print("AT+CMGF=1\r\n");
delay(500);
Serial.print("AT+CMGS=\"");
Serial.print("+39xxxxxxxxxxx");
Serial.print("\"\r\n");
delay(2000);
Serial.print("Attenzione centrale in allarme");
Serial.write(0x1A);
delay(1000);
}
void number1inserito()
{
Serial.println("OK");
delay(1000);
Serial.print("AT+CMGF=1\r\n");
delay(500);
Serial.print("AT+CMGS=\"");
Serial.print("+39xxxxxxxxxxxxxx");
Serial.print("\"\r\n");
delay(2000);
Serial.print("Sistema allarme inserito");
Serial.write(0x1A);
delay(1000);
}
void number2inserito()
{
Serial.println("OK");
delay(1000);
Serial.print("AT+CMGF=1\r\n");
delay(500);
Serial.print("AT+CMGS=\"");
Serial.print("+39xxxxxxxxxxxxx");
Serial.print("\"\r\n");
delay(2000);
Serial.print("Sistema allarme inserito");
Serial.write(0x1A);
delay(1000);
}
void number1disinserito()
{
Serial.println("OK");
delay(1000);
Serial.print("AT+CMGF=1\r\n");
delay(500);
Serial.print("AT+CMGS=\"");
Serial.print("+39xxxxxxxxxxxxxxxx");
Serial.print("\"\r\n");
delay(2000);
Serial.print("Sistema allarme OFF");
Serial.write(0x1A);
delay(1000);
}
void number2disinserito()
{
Serial.println("OK");
delay(1000);
Serial.print("AT+CMGF=1\r\n");
delay(500);
Serial.print("AT+CMGS=\"");
Serial.print("+39xxxxxxxxxxxxx");
Serial.print("\"\r\n");
delay(2000);
Serial.print("Sistema allarme OFF");
Serial.write(0x1A);
delay(1000);
}
void lettura_sms() {
if (mySerial.available()) {
mySerial.readString().toUpperCase(); // rendo maiuscola tutta la stringa per evitare errori di sintassi
mySerial.readString().toCharArray(stringa, 100); // converto la stringa message nell'array stringa
strncpy(comando, stringa, 30); // copio in comando la prima parte del messaggio ricevuto ossia: +CMT "+39numerotelefono"
Serial.println(comando);
if (strncmp(comando, "+39xxxxxxxxx", 13) == 0) { // poi controllo se in comando sia presente il numero del mittente autorizzato
if (strncmp(comando, "ON", 2) == 0) { // e inserisco impianto
stato_imp = true;
}
else if (strncmp(comando, "OFF", 3) == 0) { // o disinserisco impianto
stato_imp = false;
}
}
mySerial.print("AT+CMGDA=\"");
mySerial.println("DEL ALL\""); // cancello tutti i messaggi
}
}