Ciao a tutti ho un piccolo problema con una variabile quando al cambio di stato invio un sms se aggiorno la variabile precedentemente dichiarata TRUE , all'invio la metto a FALSE non mi invia nessun messaggio
#include <call.h>
#include <gps.h>
#include <GSM.h>
#include <HWSerial.h>
#include <inetGSM.h>
#include <LOG.h>
#include <SIM900.h>
#include <sms.h>
#include <Streaming.h>
#include <WideTextFinder.h>
#include <SoftwareSerial.h>//(10 , 11);// rx, tx
SMSGSM sms;
//GSM gsm;
int numdata;
boolean started = false;
char smsbuffer[160];
char Mittente[20];
char mittenteregistrato [13] = "+393xxxxxx58" ; // numero del mittente registrato (conosciuto)
char nomemittente [16] = "Impianto ULIVETO";
char sedicicrt [16]; // zona di memorizzazione dei primi sedici caratteri del messaggio ricevuto
int i = 0; // indice utilizzato nei cicli di for
int semaforo = 0; // semaforo riconoscimento numero telefono: o = numero riconosciuto;
// 1 = numero sconosciuto
const byte pompa = 4 ;// Il Pin 4 è quello connesso al relè1 della pompa del pozzo
const byte vasca = 5 ;// Il Pin 5 è quello connesso al relè 2 della pompa della vasca di rilancio
const byte gallmax = 7; // Il Pin 6 è quello connesso al galleggiante che segna la vasca piena
const byte gallmin = 6 ;// Il Pin 12 è quello connesso al galleggiante che segna la vasca vuota
const byte superpieno = 8 ;// Il Pin 8 è quello connesso al galleggiante che segna la vasca troppo piena ANOMALIA
const byte pinOnOff = 52; // Il Pin 10 è quello connesso al tasto ON
const byte pinstatoimpianto = 48;// il pin 11 si accende quando l'impianto e on o off
const byte pinOnOffsim = 9;// Il Pin 9 è quello connesso al TASTO CHE GESTISCE SOLO LA POMPA
//GALLEGGIANTI
byte MAX = 0 ; //VARIABILE CHE MEMORIZZA LO STATO DEL GALLEGGIANTE A LIVELLO MASSIMO CAPACITA'
byte MIN = 0; //VARIABILE CHE MEMORIZZA LO STATO DEL GALLEGGIANTE A LIVELLO MINIMA CAPACITA'
byte SUPERPIENO = 0;//VARIABILE CHE MEMORIZZA LO STATO DEL GALLEGGIANTE A LIVELLO SUPERPIENO
//-----------------------------------------------------------------------------------------------
//stato pulsante on off
byte OnOff = 0 ; //VARIABILE CHE MEMORIZZA LO STATO DEL PULSANTE SUL PIN 10
byte statoOnOff = 0 ;//Se sistema acceso o spento (HIGH = Acceso)
byte lastOnOff = 0 ;
//-----------------------------------------------------------------------------------------------
bool inviosms = true ;
bool inviosmsSuperpieno = true ;
void setup()
{
pinMode(pinOnOff, INPUT_PULLUP); // imposta il pin 10 come pin di INPUT.
pinMode(pompa, OUTPUT); // imposta il pin 4 come pin di OUTPUT.
digitalWrite(pompa, HIGH); // spegne inizialmente il relè, uso High perchè questi relè altrimenti appena accessa la scheda da subito un input e si chiude il contatto
pinMode(vasca, OUTPUT); // imposta il pin 5 come pin di OUTPUT.
digitalWrite(vasca, HIGH); // spegne inizialmente il relè, uso High perchè questi relè altrimenti appena accessa la scheda da subito un input e si chiude il contatto
pinMode(gallmax, INPUT_PULLUP); // imposta il pin 6 come pin di OUTPUT.
pinMode(gallmin, INPUT_PULLUP); // imposta il pin 12 come pin di OUTPUT.
pinMode(superpieno, INPUT_PULLUP);// imposta il pin 8 come pin di OUTPUT.
pinMode(pinstatoimpianto, OUTPUT); // indicatore impianto spento o acceso
pinMode(pinOnOffsim, OUTPUT);
digitalWrite(pinstatoimpianto, statoOnOff);// indicatore acceso alto
//Serial connection.
Serial.begin(19200);
// GSM setup
digitalWrite(pinOnOffsim, LOW);
delay(1000);
digitalWrite(pinOnOffsim, HIGH);
delay(1500); // > 1 secondo
digitalWrite(pinOnOffsim, LOW);
delay(2500); // > 2.2 secondi
Serial.println("SIM900 setup...");
if (gsm.begin(2400)) {
Serial.println("SIM900 Pronta");
started = true;
}
else
Serial.println(" SIM900 ko");
}
void loop()
{
char inSerial[50];
char position;
if (started)
{
position = sms.IsSMSPresent(SMS_ALL);// legge i messaggi in coda
if (position) {
sms.GetSMS(position, Mittente, 20, smsbuffer, 160); // Leggo il messaggio ed il mittente
// Serial.print("sms in arrivo da");
// Serial.println("Tel.:" + String( Mittente));
// Serial.println("Content: " + String(smsbuffer));
semaforo = 0;
for (i = 0; i <= 12; i++)
{
if (!(Mittente[i] == mittenteregistrato [i]))
semaforo = 1;
}
if (semaforo == 0)
Serial.print (nomemittente);
else
Serial.print (Mittente);
// attende tre secondi per consentire la lettura su lcd del mittente
Serial.print ("testo sms:");
for (i = 0; i <= 15; i++)
sedicicrt [i] = smsbuffer [i]; // memorizzo i primi 16 caratteri del messaggio ricevuto
Serial.print (sedicicrt); // espongo su lcd il messaggio ricevuto
if (strcmp(smsbuffer, "On") == 0)
{
statoOnOff = true ;
}
else if (strcmp(smsbuffer, "Off") == 0)
{
statoOnOff = false ;
}
else if (strcmp(smsbuffer, "Stato") == 0)
{
if (digitalRead(statoOnOff) )
{
sms.SendSMS(Mittente, "STATUS: impianto SPENTO"); // restituisce true se invia l'SMS
}
else
{
sms.SendSMS(Mittente, "STATUS: impianto ACCESO"); // restituisce true se invia l'SMS
}
}
else
{
Serial.println ("sms non valido");
}
// attende tre secondi per consentire la lettura del messaggio
sms.DeleteSMS(position); // Elimina l'SMS appena analizzato
Serial.print("\n--- SMS Deleted ---\n\n");
delay (1000);
}
}
OnOff = digitalRead (pinOnOff);
if (OnOff != lastOnOff) {
if (OnOff == LOW) {
statoOnOff = !statoOnOff ;
}
delay(75);
}
lastOnOff = OnOff;
digitalWrite(pinstatoimpianto, statoOnOff);
// se lo stato dal pulsante è vero oppure se lo stato da SMS è vero
if (statoOnOff ) {
MIN = digitalRead (gallmin);
MAX = digitalRead (gallmax);
SUPERPIENO = digitalRead (superpieno);
if (MAX == HIGH && MIN == HIGH) { //VASCA VUOTA
if (inviosms == true ) {
sms.SendSMS(Mittente, "STATUS:Vasca vuota PompaON,VascaOFF");
inviosms = false;
}
digitalWrite(pompa, HIGH);
Serial.print ("Pompa pozzo accesa - ");
digitalWrite(vasca, LOW);
Serial.println ("Pompa vasca spenta ");
}
// inviosms = true;
else if (MAX == LOW && MIN == LOW)
{
if (SUPERPIENO == LOW )
{
Serial.println ("anomalia - ");
if (inviosmsSuperpieno == true) {
sms.SendSMS (Mittente, "STATUS: ANOMALIA ");
inviosmsSuperpieno = false;
}
digitalWrite(pompa, LOW);
Serial.print("Pompa pozzo spenta ANOMALIA - ");
digitalWrite(vasca, LOW);
Serial.println("Pompa vasca SPENTA ANOMALIA ");
}
else {
if (inviosms == true ) {
sms.SendSMS(Mittente, "STATUS:Vasca piena PompaON,VascaON");
inviosms = false;
}
digitalWrite(pompa, HIGH);
Serial.print ("Pompa pozzo accesa - ");
digitalWrite(vasca, HIGH);
Serial.println ("Pompa vasca accesa");
}
}
else if (MAX == LOW && MIN == HIGH) {
digitalWrite(pompa, HIGH);
Serial.print ("Pompa pozzo accesa 4 - ");
digitalWrite(vasca, HIGH);
Serial.println ("Pompa vasca accesa 4");
}
}
else {
if (inviosms == true ) {
sms.SendSMS(Mittente, "STATUS:IMPIANTO SPENTO");
inviosms = false;
}
digitalWrite(pompa, LOW);
Serial.print("Pompa pozzo spenta - ");
digitalWrite(vasca, LOW);
Serial.println("Pompa vasca ");
//inviosmsSuperpieno = true;
}
//inviosms = true;
}