SMS Index No... 30
Who send the message?...+39338
Read the message... FOLDER:INCOMING|STATUS:UNREAD|PHONENO:+393366|DATETIME:21/02/23,16:39:56+04|MESSAGE:Ciao
nid69ita:
Quindi Serial.println(Testo); non ti stampa il messaggio ?
Prova a stampare il valore di Posizione
LungaRicevo =18
Posizione =-1
Testo =: "SM",33
SMS Index No... 33
Who send the message?...+39338
Read the message... FOLDER:INCOMING|STATUS:UNREAD|PHONENO:+396|DATETIME:21/02/23,19:11:15+04|MESSAGE:Ora
Ma, in sostanza, il primo consiglio che gli darei è: elimina le variabili "String" convertendole in stringhe C ossia "char array", e poi usa le relative funzioni, ad esempio la strstr() al posto di indexOf()...
@wingamesyun, se non sai come si fa, oltre a studiare un pochino i char array e relative funzioni, possiamo anche darti una mano ma è una cosa che su Arduino "devi" saper fare...
Perchè dite sempre la stessa cosa che uno non studia .Io sto usando Arduino Due e come sapete tutti molte librerie non sono compatibili.
L'unico esempio che posso usare come base e questo e mi funziona Purtroppo con la mia poca esperienza non riesco ad estrarre il testo ricevuto.
>wingamesyun: Ma sai, invece di impazzire con le librerie che vanno e che non vanno, io mi studierei BENE, una volta per tutte, le funzioni di <string.h> e poi NON userei alcuna libreria.
Prendi il set di comandi AT del modulo GSM che stai usando, ti studi bene quali sono i comandi e quali le risposte (nella documentazione ufficiale dei moduli SIMCom sono sempre ben descritte) e vai diretto scrivendo e leggendo dalla seriale senza dover usare cose scritte da altri, che fanno mille mila cose inutili e che a te servono probabilmente per il 10/15% … :
18
LungaRicevo =18
Posizione =-1
Testo =: "SM",34
SMS Index No... 34
Who send the message?...+3933
Read the message... FOLDER:INCOMING|STATUS:UNREAD|PHONENO:+3933|DATETIME:21/02/24,18:17:41+04|MESSAGE:CONTROLLO
Comunque secondo me stai facendo un casino.
Quando cerchi MESSAGGE: non hai ancora tutto il messaggio, infatti ti dice che hai solo 18 caratteri
Come può trovare quella parola se la frase è lunga 2 Km e quando sei li hai solo 18 caratteri ??
Probabilmente è l'istruzione sms.readFromSerial(buffer) che legge il resto del sms
quindi credo che quella ricerca di MESSAGE: devi metterla dopo quel sms.readFromSerial(buffer)
Vado a naso, non conosco la libreria sms. Hai il link alla libreria ? Posso dargli una occhiata.
>wingamesyun: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce, inoltre, se si risponde al post immediatamente precedente, normalmente NON è necessario alcun "quote" dato che è sottinteso.
Gli utenti da device "mobile" (piccoli schermi) ringrazieranno per la cortesia
Guglielmo
P.S.: Ho troncato io il "quote" del tuo post ... per il futuro, cortesemente, ricordatene
Mi pare hai copiato e poi modificato l'esempio sms della libreria.
Prova a rimettere dentro il contatore num (dichiara int num=0; ad inizio del programma)
e commenta o togli per ora TUTTO il pezzo dentro la loop() che cerca "+CMTI:"
dai per scontato che tutta la stringa ti arrivi in quel blocco di parentesi e probabilmente non è cosi.
readString() legge tutti i byte che ci sono sulla seriale fino a quando non interviene un timeout, ma magari a te mancano ancora pezzi di testo.
Il testo inviato dal modulo GSM ce l’ha un terminatore di stringa tipo “new line” o “carriage return”?