«

»

Set 30

Stampa Articolo

Tutorial Arduino e le stringhe II

Riprendendo un precedente articolo su Arduino e le strighe oggi ti racconto di un test che ho eseguito nei giorni scorsi e che mi ha risolto molti problemi proprio nelle conversioni da char a string e viceversa.codice string arduino

Problema:

Vorresti poter applicare uno dei metodi dell’oggetto String ad una variabile di tipo char, ad esempio estrarre solo una parte della stringa (substring).
I metodi dell’oggetto String puoi applicarli solo a variabili di questo tipo, per cui se hai una variabile di tipo char o char* devi convertire in string il suo contenuto per potervi applicare uno dei metodi.

Soluzione:

Guarda lo script sotto, in cui ho definito delle variabilidi tipo char e string per poter eseguire le conversioni necessarie:

char *mystr;
String miastringa;

void setup()
{
    Serial.begin(9600);
    mystr = "Testo di prova";
}

void loop()
{
    miastringa = String(mystr);
    Serial.println(miastringa.substring(0,5);
}

analizziamo il codice linea per linea:

linea 01: definisci una variabile di tipo char* che simula la tua variabile da convertire;
linea 02: definisci una variabile di tipo String, che accoglierà la stringa convertita e su sui applicherai il metodo substring;
linea 04: crea la funzione setup(), di tipo void;
linea 05: inizializza la comunicazione seriale, la utilizzerà per visualizzare il risultato del metodo substring;
linea 06: assegno un valore alla variabile mystr, questa variabile nel tuo sketch è quella a tua disposizione durante il loop(), in questo esempio la definisci alla linea 01 e la valorizzi nella setup() solo a titolo di esempio;
linea 10: crea la funzione loop(), eseguita cilicamente durante tutto il funzionamento dello sketch;
linea 12: esegue la conversione vera e propria, sfruttando il costruttore del’oggetto String assegno alla variabile miastringa il valore della variabile mystr;
linea 13: scrive sul monitor seriale dell’IDE Arduino il risultato del metodo substring, in questo esempio il risultato sarà la parola  Testo.

Ringrazio Luca per avermi illuminato sulla possibilità di convertire i tipi char in String sfruttando il costruttore dell’oggetto String.

Buon lavoro

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/tutorial-arduino-e-le-stringhe-ii.html

12 comments

Vai al modulo dei commenti

  1. Marco

    Ciao Mauro,
    vorrei ringraziarti per la chiarissima spiegazione !
    Complimenti per l’analisi dettagliata.
    Buon lavoro anche a te !
    Marco

  2. jcamma

    Ciao Mauro,

    Continuo con la lettura del tuo corso arduino che trovo davvero eccezionale e volevo sollevare una domanda; magari può servire a chi come me sta cominciando con arduino ed anche per capirne io un po’ di più. Provando il codice postato per convertire char–> string il simulatore vede “char* mystring” già come una stringa e non come ad esempio un array di char. Per fare ciò ho fatto una piccola modifica ma non capisco se doveva essere questo il risultato voluto… ( sperando che non mi spuntano i mostri sul codice che posto..)
    Nota comportamentale del simulatore (V. 098A)
    – Non riconosce il metodo ToCharArray ( anche con gli esempi forniti dall’IDE dà errore )
    – Non riconosce la dichiarazione char[] ( vuole il numero di char )

    void loop()
    {
    char mystr[29]= “ecco l’Array char[] di prova”;
    String miastringa;
    Serial.println(mystr);
    miastringa = String(mystr);
    String str = miastringa.substring(0,5);
    Serial.println(“ed ecco la sub stringa String—->” + str);
    while(true);
    }
    Buona giornata e sempre complimentissimi!

  3. Pizz

    ciao Mauro e compliementi per le guide di arduino!
    Vorrei poi farti una domanda, come faccio a leggere la stringa proveniente da un server con la funzione “client.read”?

    perche io lo faccio dichiarando una variabile c come char e leggendo, tuttavia mi ritrovo ad avere i cinqie valori che il server invia ma non in un array come vorrei io e tanto meno come una stringa, quindi come potrei fare?

    grazie mille!

    1. Mauro Alfieri

      Ciao Pizz,
      ti consiglio di leggere il tutorial sui led RGB via Web in cui ho analizzato la stringa in GET e definito come devi trattarla.

  4. Maurizio

    Ciao Mauro.
    Mi sto imbattendo in un problema che mi crea molta confusione tra chart e string.
    Dovrei scrivere su una riga del display LCD 20 caratteri formato da variabili che vanno visualizzate, e queste variabili hanno tre-quattro caratteri “speciali”.
    Come creare i caratteri speciali ci arrivo, però poi pensavo di creare un “buffer” dove inserirli e poi mandarli in visualizzazione.
    Solo che non riesco a farli visualizzare.
    Come posso fare??
    Grazie dell’aiuto…

    1. Mauro Alfieri

      Ciao Maurizio,
      per caratteri speciali intendi quelli tipo: “§°ç” o caratteri creati da codice?

      1. Maurizio

        Grazie Mauro per avermi risposto.
        I caratteri speciali li creo in binario (qui di seguito l’esempio di uno):
        byte ON_char[8] = {
        B00000,
        B01110,
        B10001,
        B10001,
        B10001,
        B10001,
        B01110,
        B00000
        };
        poi in in void setup():lcd.createChar(0, ON_char);
        e nel void loop() :lcd.write(byte(0));

        Ne ho creati quattro di caratteri, poi li dovrei mettere su una riga del display (20caratteri), ma gli stessi all’interno dello sketch variano, essendo variabili.
        Se li devo scrivere in maniera statica ok, ci risco, ma la mia idea era quella di creare un array con all’interno questi caratteri che cambiavano di stato in base a delle condizioni.
        Grazie per l’aiuto.

        1. Mauro Alfieri

          Ciao Maurizio,
          potrei non aver compreso la richiesta, provo a risponderti in funzione di quello che comprendo.
          I caratteri speciali, trovi un articolo dedicato nel blog, li crei come matrici 5×8 e li assegni nel buffer dell’LCD con il metodo “createChar” poi nel tuo codice usi i valori quando ti servono come dei normali caratteri.

  5. Maurizio

    Grazie Mauro per la risposta, fino alla creazione del carattere c’ero arrivato, il mio problema era visualizzare una serie di variabili che cambiavano di stato (associando i caratteri speciali creati).
    Credo di aver risolto creando un array di tipo char e poi andando a scrivere in ogni “slot” il carattere da visualizzare per poi mandarlo in scrittura all’LCD.
    char str[21]={‘ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘};

    void loop(){
    codice e variabili modificabili e scrivo nell’array
    }
    void display():{

    for(i=0;i<20;i++){
    lcd.setCursor(i,3);
    lcd.print(str[i]);
    }
    Così funziona e chiedo il tuo parere, c'è una strada migliore?
    Comunque mi rimane una grande confusione con char e string….che differenza c'è tra char e char*??
    Grazie.

    1. Mauro Alfieri

      Ciao Maurizio,
      è una buona strada, la stessa che probabilmente avrei adottato se avessi avuto il medesimo problema. Tuttavia non mi sono mai posto nella condizione di giudicare una soluzione software in quanto dico che: “dato un problema sw da risolvere” penso ” esistano almeno 100 modi di risolverlo” e tutti validi.
      Per la seconda domanda ti consiglio la lettura dell’argomento su un manuale C.

  6. Maurizio

    Grazie Mauro.
    Puoi consigliarmi un buon manuale di C??
    Magari in Italiano???
    Grazie ancora.

    1. Mauro Alfieri

      Ciao Maurizio,
      non saprei consigliartelo, penso che per iniziare tu possa acquistarlo on-line leggendo le recensioni di chi lo ha già letto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>