Chiedo anticipatamente scusa perché, anche se con tutta probabilità ci saranno, non sono riuscito a trovare sul web e sul forum le informazioni che mi servivano. (avrò sbagliato le parole chiavi per la ricerca).
Comunque, senza perdermi troppo in chiacchiere
ho il seguente programma:
-Riceve un sms con su scritto "Verifica" da un numero telefonico prestabilito e retituisce le letture di 6 sensori di temperatura;
-invia un sms di errore se una specifica sonda di temperatura supera una certa soglia
il problema invece è il seguente
-no matching function for call to 'Sim800l::sendSms(String&, String&)'
la mia domanda è
-Se la funzione vuole due stringhe, ed io gli ho dato due stringhe, perché mi da errore? cosa sto sbagliando (a prescindere dal resto del codice che potrebbe essere sbagliato)
-Devo convertire in qualche modo le stringhe?
Questo è il link per la libreria del modulo SIM800l ed a seguire lascio il codice
//Inserimento librerie
#include <Sim800l.h> //Libreria del combinatore SIM800l
#include <SoftwareSerial.h> //Parametro necessario per la libreia del combinatore
Sim800l Sim800l; //dichiarazione della libreria
#include <stdio.h> //Per le conversioni da float a stringa
#include <string.h> //Per lavorare con le strighe
//Inserimento parametri
float sogliaTemp = 60.00; //in gradi centigradi, è la soglia sotto la quale l'accumulo del boiler non può scendere
char numAzienda[14]="+39"; //Stringa contenente il numero dell'AZIENDA
char numTecnico[14]="+39"; //Stringa contenente il numero del TECNICO
char numCliente[14]="+39"; //Stringa contenente il numero del CLIENTE
char nomeCliente[]="Hotel X"; //Stringa contenente il NOME del CLIENTE
bool inviato; //Variabile per conferma invio SMS
//definizione parametri provenienti da modulo gsm
String smsRicevuto; //Stringa che conterrà il testo del messaggio ricevuto
String numSmsRicevuto; //Stringa che conterrà il numero di telefono del messaggio ricevuto
//Variabili che immagazzineranno tutte le temperature (in gradi centigradi) dai sensori
float bMax, bMin, bOut, cIn, cOut, sIn, sOut, tA;
//Modelli di testo per SMS
char erroreComando[]="Comando non valido, riprovare"; //Stringa contenente il testo di errore dei comandi ricevuti per sms
char allertaAzienda[]="Attenzione: rilevato abbassamento della temperatura ACS dell'impianto"; //Stringa contenente il testo allerta per l'azienda e il tecnico
char allertaCliente[]="Guasto impianto ACS: Il tecnico verrà a verificare l'impianto nel più breve tempo possibile"; //Stringa contenente il testo allerta per il cliente
char smsTemperature[]="Temperature impianto";//Stringa contenente il messaggio con tutte le temperature dell'impianto
//definizione dei nomi degli input analogici (sonde temperatura)
#define boilerMax A0 //Sonda boiler superiore
#define boilerMin A1 //Sonda boiler inferiore
#define boilerOut A2 //Sonda uscita ACS boiler
#define caldaiaIn A3 //Sonda ingresso acqua caldaia
#define caldaiaOut A4 //Sonda uscita acqua caldaia
#define solareIn A5 //Sonda ingresso acqua pannello solare
#define solareOut A6 //Sonda uscita acqua pannello solare
#define tempAmbiente A7 //Sonda temperatura ambiente
void setup(){
Sim800l.begin(); //Inizializza la libreria del modulo gsm
Sim800l.reset(); //Resetta il modulo gsm
Sim800l.delAllSms(); //All'avvio, il programma cancella tutti i messaggi in memoria
delay(5000); //Attendi 5 secondi
}//void setup
void loop(){
//LETTURA ED IMMAGAZZINAMENTO TEMPERATURE DAI SENSORI con conversione in gradi centigradi
bMax=(float)analogRead(boilerMax)*0.2882d; delay(100);
bMin=(float)analogRead(boilerMin)*0.2882d; delay(100);
bOut=(float)analogRead(boilerOut)*0.2882d; delay(100);
cIn=(float)analogRead(caldaiaIn)*0.2882d; delay(100);
cOut=(float)analogRead(caldaiaOut)*0.2882d; delay(100);
sIn=(float)analogRead(solareIn)*0.2882d; delay(100);
sOut=(float)analogRead(solareOut)*0.2882d; delay(100);
tA=(float)analogRead(tempAmbiente)*0.2882d; delay(100);
//LOOP RICEZIONE, SALVATAGGIO E MODIFICA SMS (con testo tutto grande)
smsRicevuto=Sim800l.readSms(1); //Legge il primo SMS (ovvero nella posizione 1) in memoria e lo inserisce nella stringa "messaggioRicevuto"
smsRicevuto.toUpperCase(); //imposta tutti i caratteri dell'SMS in maiuscolo
numSmsRicevuto=Sim800l.getNumberSms(1); //legge e memorizza il numero telefonico del primo sms in memoria (ovvero il numero di telefono da cui ha ricevuto l'SMS)
//LETTURA CONTENUTO SMS (AZIENDA)
if(numSmsRicevuto.indexOf(numAzienda)!= -1){ //Se l'SMS è stato ricevuto dall'azienda
if(smsRicevuto.indexOf("VERIFICA")!= -1){ //e contiene il comando (ovvero la parola) "verifica"
Sim800l.sendSms(numAzienda,smsTemperature); //invia un sms con tutte le temperature all'azienda
delay(3000); //attendi 3 secondi dopo l'invio dell'SMS
}else{Sim800l.sendSms(numAzienda,erroreComando);} //uscita If controllo grandezza testo SMS
}//uscita If controllo numeri di telefono (e uscita IF generale)
//LETTURA CONTENUTO SMS (TECNICO)
if(numSmsRicevuto.indexOf(numTecnico)!= -1){ //Se l'SMS è stato ricevuto dal tecnico
if(smsRicevuto.indexOf("VERIFICA")!= -1){ //e contiene il comando (ovvero la parola) "verifica"
Sim800l.sendSms(numTecnico,smsTemperature); //invia un sms con tutte le temperature al tecnico
delay(3000); //attendi 3 secondi dopo l'invio dell'SMS
}else{Sim800l.sendSms(numTecnico,erroreComando);} //uscita If controllo grandezza testo SMS
}//uscita If controllo numeri di telefono (e uscita IF generale)
//CANCELLAZIONE DELLA MEMORIA DEGLI SMS (se riceviamo sms da sconosciuti o per pulire la memoria dopo aver ricevuto/inviato sms di cui sopra)
Sim800l.delAllSms(); //Cancella tutti gli SMS in memoria
smsRicevuto=""; //Svuota la memoria della stringa riservata all'SMS (pronta per immagazzinarne uno nuovo)
numSmsRicevuto=""; //Svuota la memoria della stringa riservata al numero (pronta per immagazzinarne uno nuovo)
delay(1000); //per non far andare troppo veloce il codice dopo i comandi di cancellazione
//CONTROLLO DELLE TEMPERATURE CON ANNESSA SEGNALAZIONE TRAMITE SMS
if(bMax <= sogliaTemp){ //Se la temperatura rilevata dalla sonda superiore del boiler è scesa sotto la soglia minima impostata
inviato=Sim800l.sendSms(numAzienda,allertaAzienda); //Invia SMS di allerta all'azienda
delay(1500);
if(inviato){ //Se il primo SMS è stato inviato
inviato=Sim800l.sendSms(numAzienda,smsTemperature); //Invia un secondo SMS con le temperature dell'impianto all'azienda
delay(1500);
if(inviato){ //Se il secondo SMS è stato inviato
inviato=Sim800l.sendSms(numTecnico,allertaAzienda); //Invia SMS di allerta al tecnico
delay(1500);
if(inviato){ //Se il terzo SMS è stato inviato
inviato=Sim800l.sendSms(numTecnico,smsTemperature); //Invia un secondo SMS con le temperature dell'impianto al tecnico
delay(1500);
if(inviato){ //Se il quarto SMS è stato inviato
inviato=Sim800l.sendSms(numCliente,allertaCliente); //Invia SMS di allerta al cliente
delay(1500);
}}}}}
}//void loop
Chiedo di nuovo scusa se ho sbagliato sezione e/o se non sono riuscito a trovare la risposta sul forum/web.
Grazie mille anticipatamente per l'aiuto.