/*
per apertura e chiusura
*/
#define rele 12 //pin rele apertura
#include <SoftwareSerial.h> //per la comuncazione con il modem
#include <string.h> //per le stringhe
char incoming_char = 0; //Will hold the incoming character from the Serial Port.
String stringOne,substringa;
SoftwareSerial cell(4,5); //Create a 'fake' serial port. cell(RX,TX)
void setup()
{
pinMode(rele,OUTPUT);
digitalWrite(rele,LOW);
incoming_char = 0; //inizializza
stringOne = ""; //inizializza
substringa = ""; //inizializza
Serial.begin(9600); //Initialize serial ports for communication.
cell.begin(9600); //Initialize serial ports for communication.
do
{
delay(1000);
cell.print("AT+CREG?;\r\n"); //verificare se questa istruzione funziona
delay(1000);
while(cell.available() > 0)//verifica la presenza di segnali
{
delay(100); //pausa
incoming_char = cell.read(); //Get the character from the cellular serial port.
stringOne += String(incoming_char); //compone la stringa
stringOne.trim(); //compatta la stringa tagliando le formattazioni
//Serial.print(incoming_char); //Print the incoming character to the terminal.
// Serial.println(stringOne); //stampa di controllo
}
Serial.println(stringOne); //stampa di controllo dopo il trim
substringa = stringOne.substring(9,18);
Serial.println(substringa);//stampa controllo substringa
if(substringa == "+CREG:0,1")
{
Serial.println("GSM registrato");
}
else
{
Serial.println("GSM non registrato");
}
stringOne = "";
incoming_char = 0;
}
while(substringa != "+CREG:0,1");
while(cell.available() > 0)//svuota la memoria
{
delay(50);
cell.read();
}
delay(1000); //pausa
cell.print("AT+CLIP=1 \r\n");
delay(1000); //pausa
while(cell.available()>0) //svuota i messaggi dal modem
{
delay(50); //pausa
cell.read();
// Serial.print(incoming_char); //stampa di controllo
}
delay(1000);
}
void loop()
{
/*
//verifica la registrazione del modem
delay(1000);
cell.print("AT+CREG?;\r\n");
delay(1000);
while(cell.available()>0)//verifica la presenza di segnali
{
delay(100); //pausa
incoming_char=cell.read(); //Get the character from the cellular serial port.
stringOne+=String(incoming_char); //compone la stringa
stringOne.trim(); //compatta la stringa tagliando le formattazioni
//Serial.print(incoming_char); //Print the incoming character to the terminal.
// Serial.println(stringOne); //stampa di controllo
}
//Serial.println(stringOne); //stampa di controllo dopo il trim
substringa=stringOne.substring(9,18);
Serial.println(substringa);//stampa controllo substringa
if(substringa=="+CREG:0,1")
{
Serial.println("GSM registrato");
}
else
{
Serial.println("GSM non registrato");
}
stringOne="";
incoming_char=0;
while(cell.available()>0) //svuota i messaggi dal modem
{
delay(50); //pausa
cell.read();
// Serial.print(incoming_char); //stampa di controllo
}
*/
//verifica la chiamata in arrivo
while(cell.available() > 0) //while a character is coming from the terminal to the Arduino
{
delay(50); //pausa
incoming_char = cell.read();
stringOne += String(incoming_char);
stringOne.trim();
//Serial.println(stringOne); //stampa di controllo
substringa = stringOne.substring(11,24);
}
Serial.println(substringa); //stampa di controllo
delay(1000);
if(substringa == "+39xxxxxxxxxx")//tuo numero di telefono
{
cell.println("ATH\r\n"); //per interruzione chiamata
delay(500); //pausa
digitalWrite(rele,HIGH); //preme pulsante aperura
delay(1000); //pausa
digitalWrite(rele,LOW); //rilascia pulsante apertura
delay(500); //pausa
while(cell.available() > 0) //svuota i messaggi dal modem
{
delay(50); //pausa
cell.read();
// Serial.print(incoming_char); //stampa di controllo
}
}
/*
//If a character is coming from the the Arduino to the terminal
if(Serial.available()>0)
{
incoming_char=Serial.read(); //Get the character coming from the terminal
cell.print(incoming_char); //Send the character to the cellular module.
}
}