invio di sms con arduino

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);
}

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ...

... infine, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo.

Non male come inizio :smiley:

Guglielmo

Puoi riportare questo void come lo è in originale solo cambiando i cellulari
mettendo esempio +3911111111111
c'èè qualcosa che non mi torna sul codice... esempio: serialSIM800.write("AT+CMGS="+39"rn");

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);
}

>bitmanrc: Ti pregherei, prima di rispondere, di attendere che l'OP abbia fatto quanto richiesto dal REGOLAMENTO. Grazie :slight_smile:

Guglielmo