AT Comandi Sim800L lettura

Salve a tutti, spiego brevemente il mio problema cosi magari potete aiutarmi.
Ultimamente sto provando ad usare il modulo Sim800L, fino a qua tutto bene.
Riesco a leggere il messaggio che invio sul monitor Seriale, sto usando i comandi AT che mi sembrano quelli più facili per non dover usare altre librerie. La domanda e' la seguente, io vorrei utilizzare il messaggio che invio per far fare delle operazioni al mio Arduino come accendere le luci,... come faccio a salvare il testo che mando in una Stringa per poi usarla nel mio codice?
Ho visto che sui comandi c'e' una funzione String Comparison Operators pero' devo "spostare" il testo che mando sulla seriale in una Stringa.
In allegato vi metto il codice che utilizzo per leggere i messaggi e quello che leggo nel Monitor Seriale. Spero di essermi spiegato al meglio, se qualcuno non ha capito chieda pure.

Codice:

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  //Begin serial communication with Arduino and SIM800L
  Serial1.begin(9600);

  Serial.println("Initializing..."); 
  delay(1000);

  Serial1.println("AT"); //Once the handshake test is successful, it will back to OK
  updateSerial();
  
  Serial1.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  Serial1.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
  updateSerial();
}

void loop()
  {
  updateSerial();
  }

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    Serial1.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(Serial1.available()) 
  {
    Serial.write(Serial1.read());//Forward what Software Serial received to Serial Port
  }
}
Initializing...
AT

OK
AT+CMGF=1

OK
AT+CNMI=1,2,0,0,0

OK

+CMT: "+--------------","","19/08/07,21:17:53+08"
Ciao

Ho tolto il mio numero di telefono per motivi di sicurezza.
Qualcuno sa aiutarmi?
Grazie mille a tutti :slight_smile:

sì e no...
nel senso che non ho quel modulo e non posso "accompagnarti"
però ti segnalo che ho scritto varie volte (e io sono solo l'ultimo e meno qualificato) sul problema di riconoscere "comandi" che arrivano da una seriale
se cerchi i miei post dovresti trovare sufficente ispirazione
purtroppo non avendo quel modulo non posso darti dettagli
ma ad esempio se tu facessi cercare al setaccio la sequenza di caratteri che ti arriva con uno SMS....

Come hai già evidenziato, il messaggio in entrata (quello che interessa a te) è sempre del tipo:

+CMT: "NUMERO","","YY/MM/DD,HH:NN:SS+FF"
MESSAGGIO

quindi si tratta di:

  • leggere in continuo quello che arriva sulla seriale
  • se arriva qualcosa, metterlo in una stringa (non String!) dopo aver escluso il fine riga "\n" e il ritorno a capo
    "\r" in modo da ottenere una stringa del tipo
+CMT: "NUMERO","","YY/MM/DD,HH:NN:SS+FF"MESSAGGIO
  • verificare che si tratta di un messaggio confrontando che i primi cinque caratteri siano "+CMT:"
  • se si, fare il parsing della stringa per separare i vari "componenti" ed estrarre quello che ti serve in alcune variabili

A questo punto puoi fare quello che vuoi con la variabile che contiene il messaggio.
Io aggiungerei anche una verifica sul numero, cioè deve provenire da un numero noto.

Direi che per iniziare, segui il consiglio di @Standardoil e comincia a scrivere qualcosa su come "raccogliere" ciò che arriva dalla seriale, poi con calma guardiamo il resto.

Federico

Concorquoto
Anche se io trattarei "al volo" carattere per carattere durante la ricezione