Analizzare una stringa

Salve a tutti,

avrei, cortesemente, una domanda per voi.

Immaginiamo di avere una stringa del tipo: http://192.168.103.244:81/?on

Come faccio a dire ad Arduino di prendere cio che c’è dopo il punto di domanda (in questo caso on) e inserirlo all’interno di un’altra variabile stringa?

Grazie in anticipo per la risposta,
Lorenzo

Devi fare il parsing della stringa.
Ci sono librerie già pronte oppure usi i comandi specifici per comparare 2 stringhe --> String() - Arduino Reference

Mmm... quali sarebbero questo librerie?? Dove posso trovarle?

Mentre cosa intendi con il secondo merito? Potresti farmi un esempio?

Grazie mille in anticipo,
Lorenzo

L’IDE di Arduino include sempre la AVR libc che contiene tutta una serie di utilissime funzioni. Quelle che interessano a te sono in <string.h> , in particolare guardati la strtok() che serve proprio a fare il parse di stringhe di caratteri (char array del C).

Guglielmo

Nel tuo caso ti possono tornare utili anche le seguenti funzioni:

  • strrchr() [Quella che userei io]
  • strchr()
  • strstr()
  • strsep()

Dovresti trovarle documentate al link di gpb.

Ho risolto con l'uso di IndexOF() usando i caratteri ? e ! come delimitatori del parametro.. A questo punto però ho un problema: se l'indexOF supera la posizione 9 ( e quindi deve andare in doppia cifra) mi va a -1.

Come posso ovviare al problema?

Grazie, Lorenzo

Posta il codice.

Dovresti usare una lib che gestisce http GET... Che fa appunto il parse della richiesta al server qualunque siano i caratteri e qualunque sia la sua lunghezza
Su Google puoi trovare molto sull'argomento

char floatbuf[32];
int s = postText.indexOf("?");
int f = postText.indexOf("!", s);

Serial.println(s);
Serial.println(f);
String ro= postText.substring(s+1,f);
ro.toCharArray(floatbuf, sizeof(floatbuf));
float par = atof(floatbuf);
Serial.println(par);

Ecco SukkoPera, questo è il codice!

Praticamete la variabile f se supera nove diventa -1.

Come mai?
Grazie, Lorenzo

Ma ci sono dei ! nella stringa? -1 vuol semplicemente dire che non ce ne sono, dimentica il fatto che supera 9.