Lire une variable arduino mot par mot

a marqué ce sujet comme résolu.

le plus simple alors c’est juste de faire pointer ton tableau sur le début de chaque mot :

int i = 0;
int j = 0;
char input[] = "G1 X50 Y25.3 E22.4";

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;

Dans l’idée tu découpe ta chaine, avec les mots qui te conviennent et dans ton tableau tu pointe juste sur le début de chacun. Attention par contre dans ce cas ci tu change la chaine d’origine.

+0 -0

ce sera toujours des string avec un nombre de mot maximum connu ou le nombre de mot maximum ne peut pas être déterminé ?

Si le nombre de mot max ne peux pas être déterminé alors il vaut mieux traiter les mot les un à la suite des autres sans forcement les parser d’avance (enfin je pense).

dans le setup il faut configurer le port série :

Serial.begin(9600);

et dans le code pour afficher :

Serial.print( "coucou" ); // affichage sans retour à la ligne
Serial.println( "une autre string" ); // affichage avec retour à la ligne

PS : tu n’as pas du beaucoup chercher car c’est un des premier truc qu’on trouve. sinon pour la référence Arduino.

Pas de problème :D , pour afficher un champ il suffira de faire un print, en partant du principe que tu utilise toujours le code précedent et que X est inferrieur à la taille du tableau :) .

Serial.print ( array[ x ] );

puisque *array[ x ] pointe sur le début d’un mot, ça revient à print une chaine de caratère

PS : J’avais mal lu ton avant dernier poste

+0 -0

Merci beaucoup. Ca marche trés bien.

Llaq. P.S ! Je marque le sujet en résolu. EDIT : Quand je remplace la ligne prédéfinie qui comporte le gcode par une variable qui récupère Serial.read() ca me fait une jolie erreur. Une solution ?

+0 -0

c’est normal, Serial.read() ne renvoit que le premier bit utile, donc c’est pas bon du tout. Il va falloir faire un boucle de lecture :

char input[ 64 ] = { 0 };
int i = 0;

while ( ( Serial.available > 0 ) &&
    ( i < 63 ) )
{
    input[ i++ ] = Serial.read ( );
}
input[ i ] = '\0'; // pour etre sur de finir proprement la string
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