Lire une variable arduino mot par mot

a marqué ce sujet comme résolu.

void setup() { Serial.begin(9600);

}

void loop() {

int i = 0; int j = 0; //char input[] = "G1 X50 Y25.3 E22.4"; if (Serial.available()){ char input[ 64 ] = { 0 }; //La sortie série dans une variable while ( /( Serial.available() > 0 ) && / ( i < 63 ) ) { input[ i++ ] = Serial.read ( ); } input[ i ] = '\0’; // pour etre sur de finir proprement la string //Fin écriture sortie série

char *array[16] = { NULL }; // en partant du principe que tu aurras au maximum 16 mots dans ta variable

while ( input [ i ] != '\0' ) { while ( input[ i ] == ' ' ) { // on supprime les espaces input[ i ] = '\0’; i++; }

if ( input[ i ] == '\0' )
{ // dans le cas ou ta chaine se finissais par des espaces seuls
    break;
}

array[ j++ ] = &input[ i ]; // tu sauvegardes le début du mot

while ( ( input[ i ] != ' ' ) &&
    ( input[ i ] != '\0' ) )
{ // tant qu'on est dans un mot on continue
    i++;
}

} array[ j ] = NULL; Serial.println ( array[ 0 ] ); } }

+0 -0

c’est relativement simple tu n’as pas remis le compteur à zero avant le traitement donc il pointe toujours sur le '\0' final :

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    int i = 0;
    int j = 0;
    //char input[] = "G1 X50 Y25.3 E22.4";
    if ( Serial.available ( ) )
    {
        char input[ 64 ] = { 0 };
        
        // L'entrée série dans une variable
        while ( ( Serial.available() > 0 ) &&
            ( i < 63 ) )
        {
            input[ i++ ] = Serial.read ( );
        }

        // pour etre sur de finir proprement la string
        input[ i ] = '\0’;
        // Fin écriture sortie série


        char *array[16] = { NULL };

        // ici il faut remtre i à zero sinon tu pointe toujours sur le '\0'
        i = 0;

        // en partant du principe que tu aurras au maximum 16 mots dans ta variable
        while ( input [ i ] != '\0' )
        {
            while ( input[ i ] == ' ' )
            {
                // on supprime les espaces input[ i ] = '\0’;
                i++;
            }

            if ( input[ i ] == '\0' )
            { // dans le cas ou ta chaine se finissais par des espaces seuls
                break;
            }

            array[ j++ ] = &input[ i ]; // tu sauvegardes le début du mot

            while ( ( input[ i ] != ' ' ) &&
                ( input[ i ] != '\0' ) )
            { // tant qu'on est dans un mot on continue
                i++;
            }
        }
        array[ j ] = NULL;
        Serial.println ( array[ 0 ] );
    }
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte