truc2geek

2014/08/26

Arduino : gérer des paramètres, part 1

Filed under: Arduino, Informatique, Programmation — Étiquettes : , , , , , , , — truc2geek @ 00:11

J’ai en tête plusieurs projets avec l’Arduino, des applications bien cool. Or, qui dit « application » dit « paramètres » : les dossiers dans lesquels on génère des fichiers, les paramères des comptes FTP, ou encore la vitesse de transmission en bauds pour la communication série.

On repart de l’application TesterSerie V 1.2, qui sera la V1.3 à la fin de cet article.

Exprimer le besoin

On sait qu’on aura besoin de gérer des paramètres dans différentes applications Arduino : donc on va écrire du code qui sera facilement réutilisable.
Il faudra qu’on puisse définir un jeu de paramètres par défaut, obtenir la valeur d’un paramètre, vérifier si une valeur x serait valide pour un paramère donné, modifier la valeur d’un paramètre… et c’est déjà pas mal.

Une modif au passage

Un petit détour avant de s’attaquer au coeur de cet article : je profite de modifier l’application pour retoucher la fonction « Clignoter » ; voici le code de cette fonction dans TesterSerie V 1.2 :

01.png

En relisant cette fonction, j’ai trouvé dommage qu’on ne puisse pas définir la durée pendant laquelle la diode reste allumée ou éteinte, ni la pin utilisée. Là aussi, on pense à la possibilité de réutiliser ce code dans d’autres projets.

Voici la nouvelle version, renommée :
02.png

Voilà, cette fonction est désormais plus souple, pourtant elle n’est pas plus longue ni vraiment plus compliquée : ça valait le coup de la modifier. Il faut simplement lui transmettre plus d’arguments quand on l’appelle.

le nom de l’application

Il est écrit en dur dans la fonction setup() ; on va le stocker dans une constante :03.png

Modifier la fonction setup() :
04.png

 Découper une chaîne

Un grand détour cette fois, nécessaire parce qu’il n’est pas toujours simple de gérer les chaînes de caractères.
On va utiliser des chaînes de caractères qui seront des listes de valeurs, séparées par un caractère donné, et qu’il faudra découper pour obtenir chaque valeur.

Et là, on se rend compte que le langage Arduino ne fournit pas de fonction native pour effectuer cette tâche. Enfin, on a déjà de la chance d’avoir à notre disposition le type String, alors on sourit et on se met au boulot!

Note : j’utilise la version 1.0.4 de l’IDE Arduino.

Parmi les fonctions natives applicables aux chaînes, on a length(), indexOf() et substring(), qui permettent respectivement de :
connaître la longueur d’une chaîne
localiser une chaîne dans une autre chaîne
extraire une partie d’une chaîne.

Un test simple

Pour commencer, on va juste écrire une fonction de test :
05.png

On appelle cette fonction à partir de la fonction setup() (pour qu’elle soit exécutée une seule fois) :
07.png

On connecte la carte Arduino Uno, toujours avec son shield LCD 2×16 RVB, on téléverse le programme, on ouvre le moniteur série :
06.png

Le résultat est ok : on localise bien le premier underscore « _ » en 6e position, et le 2e underscore en 8e position.
On extrait correctement les différentes valeurs.

Voici un lien vers cette version du programme : TesterSerieV1-3a.

Une version pas-à-pas

Le principe est le même, sauf qu’on ne sait pas à l’avance combien de valeurs seront présentes dans la chaîne. On définit quand même un maximum de 50 valeurs, arbitrairement (on pourra toujours relever cette valeur, si besoin).
Avec une boucle on devrait s’en sortir sans problème.

D’abord, deux nouvelles variables globales : un tableau de String nommé « tab », qui contiendra toutes les valeurs extraites, et initialisé  avec 50 valeurs.
Puis une variable de type integer, nomée « nbTab », qui stockera le nombre de valeurs réellement utilisées dans tab.
08.png

Voici d’abord une version pas-à-pas, pour bien voir le traitement à effectuer ; ici le code est adapté à la chaîne utilisée :
09.png
10.png

Voici le code de la fonction de test :
11.png

L’appel dans la fonction setup() :
12.png

On téléverse ce code dans l’Arduino, on ouvre le moniteur série, résultat :
13.png

Voici le lien vers cette version, TesterSerieV1-3b.

La version « boucle » de la fonction splitterChaine() :

14.png
15.png

On teste, avec les mêmes valeurs de test, soit « nombre_0_150 » et « _ » ; voici le résultat dans le moniteur série :
16.png

Pour vérifier que la fonction splitterChaine fonctionne dans des cas différents, on teste d’autres valeurs :

17.png

18.png

Ok, on a bien nos 5 valeurs.

On teste avec une chaîne contenant seulement deux valeurs :

19.png

20.png

Et enfin, on teste avec une chaîne contenant une seule valeur :

21.png

22.png

Conclusion de ces tests : la fonction correspond à ce qu’on voulait.

Voici le lien vers cette version : TesterSerieV1-3c.

Organiser le code : les tabs (onglets)

Cette fonction splitterChaine, et la fonction de test testSplitterChaine, ne font pas vraiment partie du coeur de l’application, ce sont plutôt des fonctions « annexes » disons. Et du coup, ce serait pas mal si on pouvait les placer à part.

Si j’en parle c’est parce qu’on peut le faire, un bouton discret situé vers le haut à droite de l’IDE permet de gérer les tabs :

23.png

24.png

La zone de création de tab apparaît :

25.png

On entre le nom de la tab, ici j’ai écrit « Chaines » (sans accent circonflexe) :

26.png

Le nouvel onglet apparaît :

27.png

On place le code des fonctions splitterChainet et testSplitterChaine dans cet onglet, on teste :

28.png

29.png

Ok le code compile bien, et le résultat dans le moniteur série est ok.

Comme on a deux onglets, on a maintenant deux fichiers « .ino ».

Voici donc les deux liens vers cette version, TesterSerieV1-3d :
fichier 1
fichier2

Fin

On ne peut pas dire que l’objectif soit atteint, puisqu’on n’a toujours aucun système de gestion des paramètres.
Mais on a préparé le terrain, et on verra la suite dans la 2e partie du tuto.

Publicités

Laisser un commentaire »

Aucun commentaire pour l’instant.

RSS feed for comments on this post. TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Propulsé par WordPress.com.

%d blogueurs aiment cette page :