2011-02-17 24 views
8

Tengo algunos problemas con Arduino sobre cómo hacer coincidir el texto.Cómo hacer coincidir texto en cadena en Arduino

tengo:

String tmp = +CLIP: "+37011111111",145,"",,"",0 

y estoy tratando de igualar:

if (tmp.startsWith("+CLIP:")) { 
    mySerial.println("ATH0"); 
} 

Pero esto no está funcionando, y no tengo ni idea de por qué.

Intenté substring, pero el resultado es el mismo. No sé cómo usarlo o no pasa nada.

¿Dónde está el error?

+4

¿cómo la primera línea, incluso compilar (lo probé en Arduiono/Cableado)? ¿Qué es CLIP? ¿Puedes publicar código de trabajo/compilable (por ejemplo, la declaración de mySerial)? –

+0

Peter en este ejemplo, no funcionará. Acabo de poner esto, por ejemplo, que obtengo del monitor Arduino Serial. Resolví mi problema con ** subserie **, solo dejé que alguien lo supiera, que Arduino en el monitor serial no muestra \ r y \ n y ese era mi mayor problema. – Min2liz

+0

@ Min2liz Si ​​mi respuesta ayudó. ¿Podrías aceptarlo como el correcto? – fuzz

Respuesta

7
bool Contains(String s, String search) { 
    int max = s.length() - search.length(); 

    for (int i = 0; i <= max; i++) { 
     if (s.substring(i) == search) return true; // or i 
    } 

    return false; //or -1 
} 

de lo contrario podría simplemente hacer:

if (readString.indexOf("+CLIP:") >=0) 

También recomiendo visitar:

https://www.arduino.cc/en/Reference/String

2

he modificado el código de gotnull. Gracias a él para ponerme en la pista.

Acabo de limitar la cadena de búsqueda, de lo contrario, la función de subcadena no devolvía siempre la respuesta correcta (cuando substring no estaba terminando la cadena). Debido a que la subcadena buscar siempre al final de la cadena.

int StringContains(String s, String search) { 
    int max = s.length() - search.length(); 
    int lgsearch = search.length(); 

    for (int i = 0; i <= max; i++) { 
     if (s.substring(i, i + lgsearch) == search) return i; 
    } 

return -1; 
} 
+0

De nada, eso debería funcionar bien. – fuzz

2
//+CLIP: "43660417XXXX",145,"",0,"",0 
if (strstr(command.c_str(), "+CLIP:")) { //Someone is calling 
    GSM.print(F("ATA\n\r")); 
    Number = command.substring(command.indexOf('"') + 1); 
    Number = Number.substring(0, Number.indexOf('"')); 
    //Serial.println(Number); 
} //End of if +CLIP: 

Ésta es la forma en que lo estoy haciendo. Espero eso ayude.

2
if (tmp.startsWith(String("+CLIP:"))) { 
    mySerial.println("ATH0"); 
} 

No se puede poner la cadena con comillas única que necesita para convertir la variable :)

Cuestiones relacionadas