Buona sera
Sto cercando di inviare sms di contenuto diverso da arduino tramite sim800.
Premetto che ho trovato in rete un programma che poteva adattarsi bene alle mie richieste .
Funziona alla grande,tranne per quanto riguarda l'invio di sms.
Praticamente qualsiasi allarme interviene lui manda sempre il medesimo sms mentre nel monitor seriale si comporta correttamente( i messaggi che invia sono diversi in base all'allarme)
Allego il file in questione.
Ringrazio anticipatamente chi mi potrà dare una mano.
#include <SoftwareSerial.h>
#define SIM800_TX_PIN 8
#define SIM800_RX_PIN 9
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
// numero massimo di allarmi da mandare per topologia
// sensore l'allarme si conta solo quando si attiva mentre per la rete si segnala quando va via e quando torna.
int max_sensore=6;
int max_rete=6;
int n_al_sensore=0;
int n_al_rete=0;
int secondi_partenza=10;
// PIN DEI SENSORI
int sensore = A0; // SENSORE DI PRESENZA
int rete = A1; // TENSIONE DI RETE DA ALLARME PER TENSIONE DI ALIMENTAZIONE MANCANTE
int lettura_sensore = 0;
int lettura_rete = 0;
byte allarme_sensore=0;
byte allarme_rete=0;
unsigned long tempo1=0;
unsigned long tempo2=0;
int nmisure;
long totale_sensore,totale_rete;
int media_sensore=0;
int media_rete=1000;
int attivazione=7; // PIN CHE ATTIVA L'ALLARME HIGH=ATTIVO
String stringa[20];
void setup() {
while(!Serial);
serialSIM800.begin(9600);
delay(1000);
Serial.println("Setup GSM Complete!");
pinMode(sensore, INPUT);
pinMode(rete, INPUT);
// interruttore con l'attivazione dell'allarme
pinMode(attivazione, INPUT);
pinMode(2, OUTPUT); // sensore con il led di allarme
pinMode(3, OUTPUT); // sensore con il led dell'SMS
Serial.begin(9600);
//lampeggia_verde();
Serial.println("In attesa di premere il pulsante rosso per attivare l'allarme...");
while (digitalRead(attivazione)==HIGH) {} // attende "secondi_partenza" secondi per iniziare a funzionare
Serial.println("PULSANTE ROSSO PREMUTO...");
//lampeggia_partenza();
delay(secondi_partenza*100);
Serial.println("Allarme attivato..."); //INTERRUTTORE PREMUTO
digitalWrite(3,LOW); // led SMS
}
void loop() {
// LEGGE I PARAMETRI IN INGRESSO
rilevato();
// INOLTRA GLI ALLARMI
verifica_allarmi();
}
void print_parametri()
{
Serial.println("-------------------------PARAMETRI---------------------------------------");
Serial.print("media sensore: "); Serial.println(media_sensore);
Serial.print("media tensione rete: "); Serial.println(media_rete);
Serial.println("-------------------------PARAMETRI---------------------------------------");
}
void manda_sms()
{Serial.println("SMS ");
// PARTE DA INSERIRE PER FAR PARTIRE L'SMS
serialSIM800.write("AT+CMGF=1rn");
delay(1000);
//Send new SMS command and message number
serialSIM800.write("AT+CMGS="+39"rn");
delay(1000);
//Send SMS content
serialSIM800.write("");
delay(1000);
//Send Ctrl+Z / ESC to denote SMS message is complete
serialSIM800.write((char)26);
delay(1000);
Serial.println("SMS Sent!");
digitalWrite(3,HIGH);
delay(250);
digitalWrite(3,LOW);
}
void verifica_allarmi() {
if ((media_sensore < 200)&& (allarme_sensore==1))
{allarme_sensore=0; Serial.print("*** SENSORE TORNATO OFF *** ");
digitalWrite(2,LOW); // spegniamo il led all'uscita 2
n_al_sensore=n_al_sensore+1; Serial.println(n_al_sensore);
manda_sms();
}
if ((media_rete > 200) && (allarme_rete==1))
{allarme_rete=0; Serial.print("*** RETE TORNATA ON ***");
n_al_rete=n_al_rete+1; Serial.println(n_al_rete);
stringa[7]="RETE ON";
manda_sms();
}
if (media_sensore > 200)
{
// SE IL SENSORE NON ERA GIA' IN ALLARME MANDA UN ALLARME
if (allarme_sensore==0){
if(n_al_sensore<max_sensore){
stringa[16]="ALLARME PRESENZA";
manda_sms();
n_al_sensore=n_al_sensore+1;}
// ALLARME PRESENZA
Serial.println("ALLARME PRESENZA");
digitalWrite(2,HIGH); // accendiamo il led all'uscita 2
allarme_sensore=1;}
}
if (media_rete < 200)
{
// SE IL SENSORE NON ERA GIA' IN ALLARME MANDA UN ALLARME
if (allarme_rete==0){
if (n_al_rete<max_rete){
stringa[16]="RETE OFF";
manda_sms();
n_al_rete=n_al_rete+1;}
// ALLARME PRESENZA
Serial.println("ALLARME RETE");
Serial.print("MEDIA RETE: "); Serial.println(media_rete);
allarme_rete=1;}
}
}
void rilevato() {
tempo1=millis();
tempo2=tempo1;
nmisure=0;
totale_sensore=0;
totale_rete=0;
while((tempo2-tempo1) <= 1000){
lettura_sensore = analogRead(sensore);
lettura_rete = analogRead(rete);
nmisure=nmisure+1;
totale_sensore=totale_sensore+lettura_sensore;
totale_rete=totale_rete+lettura_rete;
tempo2=millis();
}
media_sensore=totale_sensore/nmisure;
media_rete=totale_rete/nmisure;
}
void suona_sirena()
{}
void lampeggia_verde()
{digitalWrite(3,HIGH); delay(300);
digitalWrite(3,LOW); delay(300);
}
void lampeggia_partenza()
{digitalWrite(2,HIGH); delay(300);
digitalWrite(2,LOW); delay(300);
}