Buongiorno, volevo chiedevi un piccolo aiuto non riesco a capire perché la libreria SIM900.h mi da problema con le stringhe
C:\Users\Salvatore\Documents\Arduino\prova4\prova4.ino: In function 'void loop()':
C:\Users\Salvatore\Documents\Arduino\prova4\prova4.ino:107:58: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
sms.SendSMS(Mittente, "STATUS: impianto SPENTO"); // restituisce true se invia l'SMS
^
C:\Users\Salvatore\Documents\Arduino\prova4\prova4.ino:111:58: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
sms.SendSMS(Mittente, "STATUS: impianto ACCESO"); // restituisce true se invia l'SMS
C:\Users\Salvatore\Documents\Arduino\libraries\GSMSHIELD-master\SIM900.cpp:329:38: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
Lo sketch usa 12006 byte (37%) dello spazio disponibile per i programmi. Il massimo è 32256 byte.
Le variabili globali usano 1579 byte (77%) di memoria dinamica, lasciando altri 469 byte liberi per le variabili locali. Il massimo è 2048 byte.
Poca memoria disponibile, potrebbero presentarsi problemi di stabilità
sotto ho inserito il codice del mio progetto fatto grazie all'aiuto di Brunello22 ,
#include "SIM900.h"
#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3);// rx, tx
#include "sms.h"
SMSGSM sms;
int numdata;
boolean started = false;
char smsbuffer[160];
char Mittente[20];
char mittenteregistrato [14] = "+393891335767" ; // numero del mittente registrato (conosciuto)
char nomemittente [16] = "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 = 6; // Il Pin 6 è quello connesso al galleggiante che segna la vasca piena
const byte gallmin = 12 ;// 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 = 10; // Il Pin 10 è quello connesso al tasto ON
const byte pinstatoimpianto = 11;// 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(9600);
// GSM setup
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, 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
}
}
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 ");
}
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,VascaOFF");
inviosms = false;
}
digitalWrite(pompa, HIGH);
Serial.print ("Pompa pozzo accesa - ");
digitalWrite(vasca, HIGH);
Serial.println ("Pompa vasca accesa");
}
}
}
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 spenta ");
// inviosmsSuperpieno = false;
}
}