Brainbooster
Arduino String! (finalmente)
Tutorials -
Domenica 19 Settembre 2010 10:39
Scritto da Brainbooster

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! Sorridente

 

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!

 

Gioblu Robotics ¬© 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi