[Risolto]Ricevere sms == confrontare caratteri.

Salve,ho un problema su come confrontare caratteri da un sms, vorrei che quando ricevo un tipo di carattere singolo fai...il problema e che se il carattere sta in una stringa non dovrebbe essere riconosciuto.

[code]
    while (( c = sms.read()) != -1) {
      char s =  c;

      Serial.print(s);

      if (s == 'a')  {
        sms.beginSMS(remoteNum);
        sms.print("hai scritto 'a'");
        sms.endSMS();
        Serial.print("\nsms inviato");

[/code]
questo sketch riconoscie la 'a' anche se ci sono più di un carattere.

Spiegati meglio perchè come hai scritto non si capisce nulla.
variabile c e variabile s sono char, perchè parli di stringa ??

Ciao ,come si vede nel codice quando riceve un messaggio con il carattere 'a' fai...ma non dovrebbe fare niente se il carattere sta in una stringa come per esempio 'casa'.

Nel flusso dei byte in arrivo come distingui un carattere isolato da una stringa? Temporizzazioni? Separatori? Fineriga?

Mah, anche io non ho capito bene, comunque farei così, ossia devi accumulare TUTTO il messaggio ricevuto e DOPO verificarne il contenuto:

...
char smsTxt[161]; // Buffer di ricezione SMS
...
    // Leggo tutto il testo del messaggio
    byte i = 0;
    while ( i < 161 && c = sms.read() )
       smsTxt[i++]=  c;
    smsTxt[i] = 0; // Terminatore della stringa nel buffer
    Serial.print(smsTxt);
    // Se l'INTERO messaggio contiene solo "a" (strcmp confronta tutta la stringa,
    // ma in alternativa si può verificare la lunghezza con strlen() oppure
    // un singolo carattere in prima posizione con smsTxt[0] )
    if ( strcmp(smsTxt, "a") == 0)  {
        sms.beginSMS(remoteNum);
        sms.print("hai scritto 'a'");
        sms.endSMS();
        Serial.print("\nsms inviato");
...

PS: attento a non mettere tag "code" di troppo, che finiscono dentro al codice :wink:

Buongiorno.ho risolto il mio problema con questo sketch.

 while ((c = sms.read()) != -1) {
      smsmessage += (char)c;
    }
    if (smsmessage.indexOf("SET") > -1) {
      Serial.println("\n MESSAGE ok");
      sms.beginSMS(remoteNum);
      sms.print(smsmessage);
      sms.endSMS();
    } else {
      Serial.println("\n MESSAGE ko");
    }
    Serial.println("\nEND OF MESSAGE");
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }
  delay(1000);
}

funziona bene grazie sempre .

Funziona bene, ma stai continuando ad usare le "String" che sono comode da usare ma che sono ad alto rischio di malfunzionamenti e blocchi su Arduino.

Impara a non usarle, e ad usare le stringhe C. Ma contento tu..

docdoc:
Funziona bene, ma stai continuando ad usare le "String" che sono comode da usare ma che sono ad alto rischio di malfunzionamenti e blocchi su Arduino.

Impara a non usarle, e ad usare le stringhe C. Ma contento tu..

Buongiorno.infatti Arduino si blocca dopo una ventina di minuti ,ora modifico il codice è faccio delle prove.
Grazie.