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

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

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

14 commenti

Vai al modulo dei commenti

    • Marco il 23 Gennaio 2012 alle 21:20
    • Rispondi

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

    • jcamma il 20 Dicembre 2012 alle 13:11
    • Rispondi

    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!

    • Pizz il 11 Agosto 2014 alle 14:33
    • Rispondi

    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. 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.

    • Maurizio il 23 Dicembre 2016 alle 14:30
    • Rispondi

    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. Ciao Maurizio,
      per caratteri speciali intendi quelli tipo: “§°ç” o caratteri creati da codice?

        • Maurizio il 11 Gennaio 2017 alle 08:21
        • Rispondi

        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. 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.

    • Maurizio il 13 Gennaio 2017 alle 08:59
    • Rispondi

    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. 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.

    • Maurizio il 26 Gennaio 2017 alle 11:06
    • Rispondi

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

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

    • IW2JAF il 29 Settembre 2020 alle 09:59
    • Rispondi

    Alla riga 13 manca una parentesi tonda di chiusura dopo il 5

    Molto interessante l’articolo, grazie

    1. Grazie,
      errori di battitura .. correggo subito.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.