Comparazione di due stringhe...

salve ragazzi.. sto lavorando al mio progettino....

sono arrivato al punto di comparare due stringhe.... non so perchè ma non ci sto proprio riuscendo...

vi faccio un esempio...

 char smsbuffer[160];
  char n[20];
  if(gsm.readSMS(smsbuffer, 160, n, 20)) //dove il 160 è la lunghezza di caratteri che smsbuffer contiene
  {
    Serial.println(n);
    Serial.println(smsbuffer);
    if(smsbuffer == "on"){
      digitalWrite(13,HIGH);
    }
    else if (smsbuffer== "off")
      { digitalWrite(13, LOW);
      }
    
       
  }
  delay(1000);
  sms.DeleteSMS(1);

perchè il codice non funziona?... o meglio: viene compilato caricato, l'sms viene letto ma non succede nulla..... nn si accende il led...

ho fatto qualche prova e mi sono accorto che sul monitor seriale mi scrive l'sms con un carattere in meno.. ma ho fatto tutte le dovute prove .... nada

un consiglio?

smsbuffer è un array di char, quindi leggi un carattere alla volta non troverai mai ON insieme se non fai String messaggio += (char)n;

Metti tutto in una stringa e poi cerca i caratteri con indexof se =-1 vuldire che non c'e' se >=0 || !=-1 (usa quello che meglio credi) ti restituisce la posizione del primo carattere della tua stringa cercata

Comunque dici poco e niente tipo la libreria che usi, se il pezzo che manca è in fondo o all'inizio, un esempio di stringa che mandi e che leggi, if(gsm.readSMS(smsbuffer, 160, n, 20)) 160 è la lunghezza, n??

ciao

Prova usando il tipo String al posto del tipo char.

pablos: smsbuffer è un array di char, quindi leggi un carattere alla volta non troverai mai ON insieme se non fai String messaggio += (char)n;

Metti tutto in una stringa e poi cerca i caratteri con indexof se =-1 vuldire che non c'e' se >=0 || !=-1 (usa quello che meglio credi) ti restituisce la posizione del primo carattere della tua stringa cercata

Comunque dici poco e niente tipo la libreria che usi, se il pezzo che manca è in fondo o all'inizio, un esempio di stringa che mandi e che leggi, if(gsm.readSMS(smsbuffer, 160, n, 20)) 160 è la lunghezza, n??

ciao

più tardi provo a modificare vediamo cosa succede

ad esempio.. allo stato degli atti....

se mando un sms con scritto PROVA il serialmonitor mi restituisce il numero di telefono e PROVA...

modificando però il 160(dove ho commentato) e metto 5 ad esempio.. mi restituisce PROV....

prima provo però come mi ha suggerito leo72.... non so però se la classe accetta una string anziche un char...

vi faccio sapere...

ps la liberia è quella di futuraopen per SIM900

no, la libreria non accetta la modifica in string....

ho provato a dichiarare un tipo String = prova; e poi successivamente fare prova=smsbuffer; e poi nell'if fare (prova == "on");

ma non fa nulla.... non si accende il led...

come posso fare a convertire il char array in stringa e poi poterla comparare nell'if?

String messaggio = String(smsbuffer);

if(messaggio.indexOf("on") != -1) digitalWrite(13, 1); if(messaggio.indexOf("off") != -1) digitalWrite(13, 0);

PABLOS

funziona tutto!
AVRAI UNA STATUA D’ORO NEL MIO GIARDINO…

a parte tutto… nn ho mai lavorato con indexof… se hai due secondi mi spieghi in breve come funziona!

GRZ!

--> http://arduino.cc/en/Reference/StringIndexOf

skosso: a parte tutto..... nn ho mai lavorato con indexof... se hai due secondi mi spieghi in breve come funziona! GRZ!

certo:

E' molto semplice, prendiamo per ES:

String str = "Hello world, welcome to the universe."; int pos = str.indexOf("welcome");

il risultato di pos sarà 13 ... contando da 0 alla prima lettera di "welcome"


se cerchi una lettera che è ripetuta nella frase verrà restituita solo la prima ES:

String str = "Hello world, welcome to the universe."; int pos = str.indexOf("e");

il risultato di pos sarà 1 ... contando da 0 alla prima lettera "e" (nella frase ci sono 6 "e" se lo spumante in vena non mi frega :) )


se nella stringa cerco una sequenza "blabla"

String str = "Hello world, welcome to the universe."; int pos = str.indexOf("blabla");

il risultato di pos sarà -1 ... che corrisponde a "non l'ho trovata!"


concludendo: se lo trova ti da un numero positivo indicando la posizione, se non lo trova ti dice -1. se non ti interessa la posizione precisa, ma solo sapere se esiste, ti basta cercare se int pos è >= a 0 oppure != da -1

nel tuo caso messaggio = "3331234567on"

String str = "3331234567on"; int pos = str.indexOf("on");

il risultato di pos sarà 10 .... quindi e' > di 0 e != (diverso) da -1 :)

spero sia chiaro, non ho inventato nulla, sono istruzioni uguali al javascript .... ciao