![]() |
|
String! (finalmente)
Come sapete a partire dalla versione 0019 dell'IDE di Arduino e entrata a far parte delle librerie core, la classe String.
Questo nuovo componente ci permetterà di considerare le stringhe per quello che sono (con tutti gli operatori annessi) e non più solo come array di caratteri :) rendendo la vita molto più semplice a chi lavora molto con le stringhe ma non solo.
Vediamo come richiamare un'istanza di questa nuova classe ed usarla nei nostri programmi...
Per prima cosa c'è da dire che string và richiamato con la 'S' maiuscola, perchè con la minuscola il compliatore considererà come array di caratteri e non come stringa, per cui, per dichiarare all'inizio del nostro programma una variabile stringa scriveremo qualcosa del tipo:
Â
String stringaUno = "Ciao Stringa";
Il risultato di un comando simile è che crea la variabile stringaUno che contiene il testo "Ciao Stringa"
infatti se stampassimo sulla seriale il contenuto della variabile vedremmo la classe string restituirci il valore assegnato,
Â
es: Serial.println(stringaUno); //Dovrebbe stampare sul serial monitor la frase "Ciao Stringa"
Ma questo non è l'unico modo di farlo, vediamo sotto altri modi altrettanto validi ma con qualche funzionalità aggiuntiva ;
String stringaUno = "Ciao Stringa"; // usiamo una costante-stringa
String stringaUno = String('a'); // Crea la variabile stringaUno e gli assegna il valore di a
String stringaDue = String("Questa è una stringa"); // Assegna alla variavile stringaDue il valore della costante "Questa è una stringa"
String stringaUno = String(stringaDue + " altra roba"); // Crea la variabile stringaUno e ne assegna il contenuto concatenando il contenuto di stringaDue con del testo aggiuntivo
String stringaUno = String(13); // Assegna un numero intero alla variabile stringaUno
String stringaUno = String(analogRead(0), DEC); // Assegna alla variabile stringaUno iil valore della lettura del pin 0 con base decimale
String stringaUno = String(45, HEX); // Assegna alla variabile stringaUno il valore 45 ma inteso come valore esadecimale
String stringaUno = String(255, BIN); //Assegna alla variabile stringaUno il valore 255 ma inteso come valore binario
String stringaUno = String(millis(), DEC); // da long a string con base decimale
Potete sperimentare in prima persona gli effetti di queste dichiarazioni incollando il seguente codice tratto dal playground e riadattato in Italiano per semplicità :)
/*
String constructors
Examples of how to create strings from other data types
created 27 July 2010
modified 4 Sep 2010
by Tom Igoe
http://arduino.cc/en/Tutorial/StringConstructors
This example code is in the public domain.
Tradotto e adattato da Brainbooster
*/
void setup() {
Serial.begin(9600); //inizializziamo la seriale per vedere cosa succede
}
void loop() {
// assegnamo una stringa-costante
String stringaUno = "Ciao Stringa";
Serial.println(stringaUno); // stampa "Ciao Stringa"
// ccrea la variabile e le assegna come valore a
stringaUno = String('a');
Serial.println(stringaUno); // stamperà "a"
// converto una stringa in un oggetto String
String stringaDue = String("Questa è una Stringa");
Serial.println(stringaDue); // stamperà "Questa è una Stringa"
// concatenamento di due stringhe
stringaUno = String(stringaDue + " con altra roba");
// stamperà "Questa è una Stringa con altra roba":
Serial.println(stringaUno);
// assegnazione di numeri interi
stringaUno = String(13);
Serial.println(stringaUno); // stamperà "13"
// assegnazione di interi con base decimale:
stringaUno = String(analogRead(A0), DEC);
// stamperà "453" o qualsiasi valore letto da analogRead(A0) in decimale
Serial.println(stringaUno);
// assegnazione di interi con base esadecimale
stringaUno = String(45, HEX);
// stamperà "2d", che è la versione in esadecimale del valore decimale 45:
Serial.println(stringaUno);
// assegnazione di interi con base binaria
stringaUno = String(255, BIN);
// stamperà "11111111" che è la versione binaria a 8 bit del numero intero 255
Serial.println(stringaUno);
// assegnazione di un long ad una stringa:
stringaUno = String(millis(), DEC);
// stamperà "123456" o quallsiasi valore abbia millis() in questo momento:
Serial.println(stringaUno);
// mentre è true non fà niente:
while(true);
}
Se aprite il serial monitor dopo avere fatto l'upload di quel codice vedrete l'effetto dei comandi digitati.
Avete visto come è semplice adesso concatenare le stringhe? basta il carattere "+" ! ed il gioco è fatto!
Ma questo è soltanto il costrutto principale di String! dalla classe principale derivano anche vari altri metodi figli che adesso guarderemo velocemente...
Â
Figli di String! 
Â
Ricordiamo velocemente gli altri comandi inerenti alla classe String per vedere cosa fanno :
Â
string.charAt(n) //Ci ritorna il carattere contenuto nella stringa in posizione "n" string.setcharAt(index,n) //Inserisce nella stringa in posizione "index" il carattere "n" string.compareTo(string2) //Controlla carattere per carattere se la stringa string viene, in ordine alfaberico, prima o dopo di string2 (i numeri vengono prima dei caratteri) string.concat() //Ancora nessuna documentazione string.endsWith(string2) //Controlla se la stringa "string" termina con la stringa string2 e ritorna true in caso positivo string.equals(string2) //Controlla se "string" è uguale a "string2" sensibile alle maiuscole/minuscole , ritorna true in caso affermativo string.equalsIgnoreCase(string2) // Controlla se "string" è uguale a "string2" insensibile alle maiuscole/minuscole , ritorna true in caso affermativo string.getBytes() //Ottiene un puntatore all'array di caratteri che compone una stringa string.indexOf(valore,da) //Ottiene se esiste l'indice che ha il carattere "valore" nella stringa "string" a partire da "da" string.lenght(string) //Ottiene in decimale il numero di caratteri che compongono la stringa string.replace() //Ancora nessuna documentazione string.startsWith(string2) //Controlla se la stringa "string" inizia con la stringa "string2" e ritorna true in caso positivo string.substring(da, a) //Estrapola una stringa da string a partire dall'indice "da" compreso fino all'indice "a" string.toCharArray() //Ottiene un puntatore come getBytes ma dà il carattere relativo string.toLowerCase () //Trasforma la stringa "string" tutta in minuscolo string.toUpperCase () //Trasforma la stringa "string" tutta in maiuscolo string.trim() //Elimina gli spazi dalla stringa "string" sia in cima che in coda
Spero che dopo questa breve introduzione all'uso di string sia stata abbastanza stuzzicante, così da indurvi ad approfondire l'argomento maggiormente, adesso con String tutto sarà più semplice, dal parsing delle informzioni ricevute alla stesura di protocolli custom di comunicazione :)
Ma spero anche che sia utile come reference rapido per questa nuova classe :)
Ciao a tutti da Brainbooster, Divertitevi!
