Offline
Newbie
Karma: 0
Posts: 1
|
 |
« on: January 19, 2012, 04:43:21 pm » |
Ciao a tutti, ho un problema con la ricezione degli sms mediante la scheda libelium connessa con Arduino UNO. Vorrei salvare in un array le risposte ottenute dopo un 'AT+CMGL="ALL"', in particolare solo il corpo del messaggio; eventualmente (ma come priorità minore) salvare anche il numero telefonico per la gestione della lista chiamate. Il numero degli sms in memoria è ovviamente variabile, come anche la lunghezza del messaggio testuale vero e proprio. Inizialmente tale gestione avverrà con l'hyperterminal aperto, poi il tutto dovrà funzionare in modalità stand-alone.
Nel caso del mio codice, mettendo al posto di "100" un valore maggiore dei caratteri "scaricati" con l'AT+CMGL, la routine while va in crash; stesso comportamento nel caso di stringa vuota ottenuta a seguito dell'istruzione AT+CMGL (per mancanza di sms in memoria) e con il valore 100 invariato. Con il codice sotto indicato e con un paio di sms in memoria, riesco a leggere tutta la parte del primo messaggio (dal +CMGL:1 al corpo del messaggio, un banalissimo "ciao") e un pezzo del secondo +CMGL:2. Ad ogni lettura poi l'array viene anche riempito con la stringa "AT*CMGL=ALL" spedita dal ciclo loop iniziale (è come se il Serial.read() leggesse anche ciò che viene spedito come richiesta) Ecco parte del mio codice:
void smsricevuti(){ int array=0; int j=0; int nbytes=Serial.available(); char readstring[200]; do{ while(Serial.available()>0){ readstring[j]=Serial.read(); j++; } }while (j<=100); Serial.println(readstring); delay(20000); }
risposta dopo 4 cicli:
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+39328xxxxxxx","","12/01/15,20:18:25+04" ciao
+CMGL: 2,"RE AT+CMGL="ALL" C READ","+39328xxxxxxx","","12/01/15,20:21:53+04" ciao
OK AT+CMGL="ALL"
+CMGL: 1,"REC READ", AT+CMGL="ALL" "+39328xxxxxxx","","12/01/15,20:18:25+04" ciao
+CMGL: 2,"REAT+CMGL="ALL"
+CMGL: 1,"REC READ", AT+CMGL="ALL" "+39328xxxxxxx","","12/01/15,20:18:25+04" ciao
+CMGL: 2,"REAT+CMGL="ALL"
+CMGL: 1,"REC READ",
Grazie, saluti.
|