Salve a tutti mi servirebbe una mano, io ho creato un progettino di rilevamento/lettura delle sonde di temperatura tramite gsm, ora mi sono bloccato perchè dovrei mettere un allarme quando la caldaia va in blocco.
Mi spiego meglio quando la caldaia va in blocco mi si accende una spia sul quadro elettrico, io vorrei usare arduino che quando la spia sul quadro elettrico si accende mi manda un sms e io capisco che la caldaia si e bloccata.
vi mando il mio sketch funzionante di controllo sonde per avere una mano da voi grazie a tutti
#include "gsm.h"
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
int numdata;
char mobileno[]="+39xxxx"; //Phone Number authorized
char mobileno1[]="+39xxxx"; //Second Phone Number authorized
char tmpmobileno[30]; //buffer for reading phone number from SMS
char smstxtwrite[]="Blocco Bruciatore";
char smstxtread[]="Gradi"; // Sms send with your authorize number
int gradi0=40; // Degress top 0
int gradi1=40; // Degress top 1
int gradi2=99; // Degress top 2
boolean started=false;
boolean onesend=true; // Sms only one
char inSerial[40];
char gsmSerial[40];
char smstempc[32]; // for resend sms
char rx_sms[32]={0};
int i=0;
// Imposta il numero di pin analogico A0 to A5
int pin0=0;
int pin1=1;
int pin2=2;
// Dichiara e inizializza la variabile che conterrà la temperatura rilevata
int tempc0=0;
int tempc1=0;
int tempc2=0;
// pin per led
int ledpin=3;
void setup()
{
Serial.begin(9600); // Inizializza la comunicazione seriale
pinMode(ledpin, OUTPUT);
Serial.println("GSM Starting.");
if (gsm.begin(9600)){
Serial.println("\nstatus=READY");
started=true;
}
else Serial.println("\nstatus=IDLE");
delay(2000);
};
static unsigned long myMillis = 0;
void loop()
{
if ((millis() - myMillis) >= 1000)
{
serialhwread();
serialswread();
tempc0 = ( 5.0 * analogRead(pin0) * 100.0) / 1024.0;
tempc1 = ( 5.0 * analogRead(pin1) * 100.0) / 1024.0;
tempc2 = ( 5.0 * analogRead(pin2) * 100.0) / 1024.0;
if( (tempc0 > gradi0)
||(tempc1 > gradi1)
||(tempc2 > gradi2))
{
digitalWrite(ledpin, HIGH); //accendo
Serial.println(tempc0);
Serial.println(tempc1);
Serial.println(tempc2);
Serial.println(" Gradi BLOCCO BRUCIATORE ");
if(onesend){
smssend();
smssend1();
onesend=false;
}
}
else {
onesend=true;
digitalWrite(ledpin, LOW); //spengo
if( (tempc0 > 0)
||(tempc1 > 0)
||(tempc2 > 0)){
Serial.println(tempc0);
Serial.println(tempc1);
Serial.println(tempc2);
Serial.println(" Gradi TUTTO OK ");
}
}
// tempc0 = 0;
// tempc1 = 0;
// tempc2 = 0;
//Formula che trasforma analogico in gradi centigradi
smsreadtxt();
myMillis = millis();
}
};
char checksms()
{
return sms.IsSMSPresent(SMS_ALL);
}
void smsreadtxt()
{
int i=0;
if (checksms()>0)
{
for (i=1; i<=20;i++)
{
int res;
memset(tmpmobileno, 0x00, sizeof(tmpmobileno));
res = sms.GetAuthorizedSMS(i, tmpmobileno, rx_sms, sizeof(rx_sms), 0, 0);
if (GETSMS_AUTH_SMS == res)
{
if (0 == strncmp(rx_sms,smstxtread,sizeof(rx_sms)))
{
Serial.println("\nSMS GRADI found!");
smssend_tempc(tmpmobileno);
}
else
{
Serial.print("\nSMS received: ");
Serial.println(rx_sms);
}
smsdel(i);
}
else if (GETSMS_NOT_AUTH_SMS == res)
smsdel(i);
}
}
}
void smsdel(int i){
if (sms.DeleteSMS(i))
Serial.print("\nSMS Delete OK on position");
Serial.println(i);
}
void smssend(){
//delay(1000); // Attende 1 secondo
int res;
gsm.SetCommLineStatus(CLS_FREE);
snprintf(smstempc,63, "%s %d Mand %d Mix %d Rit", smstxtwrite, tempc0, tempc1, tempc2);
res = sms.SendSMS(mobileno, smstempc);
if (1 == res)
Serial.println("\nSMS sent OK");
else
{
sprintf(smstempc, "Errore invio :%d", res);
Serial.println(smstempc);
}
}
void smssend_tempc(char *numfromsms){
snprintf(smstempc, 63,"%d Mand %d Rit %d Mix", tempc0, tempc1, tempc2);
if (sms.SendSMS(numfromsms, smstempc))
Serial.println("\nSMS TEMP sent OK");
}
void smssend1(){
int res;
gsm.SetCommLineStatus(CLS_FREE);
snprintf(smstempc,63, "%s %d Mand %d Mix %d Rit", smstxtwrite, tempc0, tempc1, tempc2);
res = sms.SendSMS(mobileno1, smstempc);
if (1 == res)
Serial.println("\nSMS sent OK");
else
{
sprintf(smstempc, "Errore invio :%d", res);
Serial.println(smstempc);
}
}
void serialhwread(){
i=0;
if (Serial.available() > 0){
while (Serial.available() > 0) {
inSerial[i]=(Serial.read());
delay(10);
i++;
}
inSerial[i]='\0';
if(!strcmp(inSerial,"/END")){
Serial.println("_");
inSerial[0]=0x1a;
inSerial[1]='\0';
gsm.SimpleWriteln(inSerial);
}
if(!strcmp(inSerial,"SIGNAL")){
Serial.println("SIGNAL QUALITY");
gsm.SimpleWriteln("AT+CSQ");
}
if(!strcmp(inSerial,"CALL")){
Serial.print("CALL NUMBER ");
Serial.println(mobileno);
gsm.SimpleWrite("ATD");
gsm.SimpleWrite(mobileno);
gsm.SimpleWriteln(";");
}
if(!strcmp(inSerial,"CLOSE")){
Serial.println("CALL CLOSE");
gsm.SimpleWriteln("ATH0");
}
if(!strcmp(inSerial,"INFO")){
Serial.println("INFO OPERATOR");
gsm.SimpleWriteln("AT+COPS?\r\n");
}
if(!strcmp(inSerial,"REP")){
Serial.println("ENABLE VERBOSE REPORT");
gsm.SimpleWriteln("AT+CMEE=2");
}
if(!strcmp(inSerial,"PIN")){
Serial.println("PIN INFO");
gsm.SimpleWriteln("AT+CPIN?");
}
else{
Serial.println(inSerial);
gsm.SimpleWriteln(inSerial);
}
inSerial[0]='\0';
}
}
void serialswread(){
int i=0;
for(i=0;i<10000;i++)
gsm.SimpleRead();