Go Down

Topic: Sms estrarre il testo dal messaggio ricevuto. (Read 210 times) previous topic - next topic

wingamesyun

Salve ,ricevo il messaggio correttamente ma non riesco ad estrarre solo il testo ricevuto .
Code: [Select]
void loop() {
if (Serial2.available()) {

    String buffer = "";
    buffer = Serial2.readString();
    Serial.println(buffer);
    // Serial.println(buffer);
    int LungaRicevo = buffer.length();
    Serial.println(LungaRicevo);
    int Posizione = buffer.indexOf("MESSAGE:");
    String Testo = buffer.substring(Posizione + 8, LungaRicevo);
    Serial.println(Testo);

    if (buffer.indexOf("+CMTI:") != -1) {

      Serial.print("SMS Index No... ");
      int indexno = sms.indexFromSerial(buffer);
      Serial.println(indexno);

      Serial.print("Who send the message?...");
      Serial.println(sms.getSenderNo(indexno));

      Serial.print("Read the message... ");
      Serial.println(sms.readFromSerial(buffer));
    } else {
      Serial.println(buffer);
    }   
  }
}

nid69ita

Questa cosa stampa su monitor ? 
Serial.println(buffer);
my name is IGOR, not AIGOR

wingamesyun

Stampa questo.
Code: [Select]
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

#3
Feb 23, 2021, 05:10 pm Last Edit: Feb 23, 2021, 05:10 pm by nid69ita
Quindi Serial.println(Testo);  non ti stampa il messaggio ?
Prova a stampare il valore di Posizione
my name is IGOR, not AIGOR

wingamesyun

#4
Feb 23, 2021, 06:57 pm Last Edit: Feb 23, 2021, 07:17 pm by wingamesyun
Quindi Serial.println(Testo);  non ti stampa il messaggio ?
Prova a stampare il valore di Posizione
Code: [Select]
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



nid69ita

#5
Feb 23, 2021, 08:59 pm Last Edit: Feb 23, 2021, 09:05 pm by nid69ita
Posizione -1 vuol dire che non trova la parola
Quindi metti anche quel pezzo di codice in un if (Posizione != -1 )
my name is IGOR, not AIGOR

docdoc

#6
Feb 24, 2021, 11:21 am Last Edit: Feb 24, 2021, 11:22 am by docdoc
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...;)
Alex "docdoc"
- "Qualsiasi cosa, prima di rompersi, funzionava"

wingamesyun

#7
Feb 24, 2021, 06:06 pm Last Edit: Feb 24, 2021, 06:12 pm by wingamesyun
Perchè dite sempre la stessa cosa che uno non studia :smiley-confuse:.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.

nid69ita

#8
Feb 24, 2021, 06:11 pm Last Edit: Feb 24, 2021, 06:13 pm by nid69ita
Posizione -1 vuol dire che non trova la parola
Quindi metti anche quel pezzo di codice in un if (Posizione != -1 )
Code: [Select]
int Posizione = buffer.indexOf("MESSAGE:");
if(Posizione != -1)
{ String Testo = buffer.substring(Posizione + 8, LungaRicevo);
  Serial.println(Testo);
}
my name is IGOR, not AIGOR

gpb01

#9
Feb 24, 2021, 06:13 pm Last Edit: Feb 24, 2021, 06:14 pm by gpb01
>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% ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

wingamesyun

Code: [Select]
int Posizione = buffer.indexOf("MESSAGE:");
if(Posizione != -1)
{ String Testo = buffer.substring(Posizione + 8, LungaRicevo);
  Serial.println(Testo);
}

Code: [Select]
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

come si vede dalla seriale non entra nel    if .

nid69ita

#11
Feb 24, 2021, 06:33 pm Last Edit: Feb 24, 2021, 06:48 pm by nid69ita
Se ti stampa quello che scrivi, NON hai fatto la modifica che ti ho indicato.   
O segui le mie indicazioni oppure non so che dirti.
my name is IGOR, not AIGOR

wingamesyun

#12
Feb 24, 2021, 06:45 pm Last Edit: Feb 24, 2021, 06:49 pm by wingamesyun
Non stampa nulla .
GSMsim  questa e la libreria la puoi scaricare direttamente dal IDE.

nid69ita

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.
my name is IGOR, not AIGOR

wingamesyun

#14
Feb 24, 2021, 06:58 pm Last Edit: Feb 24, 2021, 07:00 pm by gpb01
Comunque secondo me stai facendo un casino.
GSMsim  questa e la libreria la puoi scaricare direttamente dal IDE.

Go Up