Créer un MENU – LCD avec Arduino.
La principale fonction d'un afficheur LCD est de renvoyer des informations à l'utilisateur d'un système. Mais il peut également donner la possibilité de saisir des données pour piloter ce système. Prenons l'exemple d'un thermostat d'ambiance. A l'aide d'une commande de boutons, on peut saisir, la consigne de température voulue dans une pièce.
L’intérêt de ce projet réside dans le fait qu'il n'est plus utile d'accéder au programme source pour modifier une valeur et de téléverser pour agir sur le système. Ainsi le pilotage du système est rendu, de toute évidence, accessible à des utilisateurs lambdas.
Le but de notre projet va être, donc au travers d'un programme exemple que nous vous proposons, de faire varier l'intensité lumineuse de plusieurs LED (2) via un afficheur LCD et un clavier de boutons PLUS (+), MOINS (-), ENTRÉE.
1 - Le matériel.
- Une carte Arduino.
- Un afficheur LCD . 16X2.
- deux (2) LED Rouge et Vert.
- Trois résistances de charge de 220 ohm.
- Trois Boutons poussoirs.
- Deux potentiomètres de 10k ohm.
2 - Les branchements.
Étude du projet.
D'abord nous avons trois boutons poussoirs. PLUS (+), MOINS (-) et ENTRÉE.
Évidemment, les boutons poussoirs serviront à naviguer dans un menu et c'est aussi grâce à eux que nous pourrons saisir une donnée puis l'affecter à l'une des LED.
La fonction clavier() contrôle l'état des boutons. et renvoie les actions de chaque bouton à sa variable de retour nommé "action".
Pour affecter une donnée à l'une des LED, il faut avoir la possibilité de les sélectionner. Alors il va de ce fait falloir créer un menu de sélection.
La fonction menu() activera l’affichage de chaque fenêtre en fonction des actions sur les boutons et par conséquent elle aura en paramètre la variable de retour de la fonction clavier().
En clair, le plus gros du travail réside dans la conception du menu. Car gérer un afficheur LCD et deux LED nous savons le faire.
Consultez au besoin le tuto l'afficheur LCD, comment l'exploiter ?.
Mais avant de passer au menu, il faut tout d'abord s'intéresser à deux points essentiels concernant la donnée. L'unité et sa grandeur d'exploitation.
1 L'unité de la donnée.
Effectivement il y a plusieurs façons de piloter un système.
Prenons pour exemple des systèmes qui nécessitent l'utilisation de données en degrés Celsius, en degrés angulaire, en mètres, ou autres.
En partant de notre exemple, le pourcentage % est l'unité la plus parlante et la plus simple à exploiter pour un utilisateur aux commandes d'un système de variations de puissances. Cette unité est donc préférable si plusieurs utilisateurs ont accès au système.
2 Grandeur de la donnée.
En fonction du système, d'autre projets peuvent utiliser des valeurs angulaires allant jusqu’à 180° ou 360° (servomoteur) , une température ou une distance précise etc... .
Certains projets, en fonction de leurs équipements et de leurs précisions auront besoin d'une valeur de données bien plus grande comme 450mm ou plus.
Il faut souligner qu’une valeur plus grande que la grandeur de la donnée peut compromettre le bon fonctionnement de vos projets.
A l'inverse, une valeur négative ou trop petite peut également être source de problèmes.
En effet, pour assurer un bon pilotage et sécuriser votre système il ne faut pas dépasser la grandeur et la valeur minimale imposées par le système.
Par conséquent, il faut limiter la valeur de saisie entre ces deux bornes mini et maxi.
Ainsi une personne non averti ne pourra pas saisir une donnée aberrante pour le système.
Dans notre cas, pour piloter les LED nous utilisons une modulation de puissance allant de 0 à 255 points. La grandeur maximale pour notre donnée est donc de 255 et la valeur minimale de 0. Au delà de ces valeurs le système réagira de façon non désiré ou aléatoire.
3.La limitation de donnée.
Nous avons différencié deux types de données:
"Numérique" pour des nombres et "Pourcentage" pour une valeur en pourcentage.
Numérique.
Pour limiter la saisie d'une valeur numérique chaque chiffre est limité en fonction de la valeur maximum de la donnée exploitable.
Pour notre exemple, nous limiterons la saisie à 255 (PWM). Ce qui revient à contrôler, si le chiffre de la centaine est égale à 2, dans ce cas la dizaine aura pour valeur maximum 5 et de même pour la dizaine, si elle est égale à 5, l'unité aura pour valeur maximum 5.
La donnée en pourcentage.
Étant donné que la valeur de saisie sera préalablement conditionnée, dans le programme source, entre 0% et 100% l'utilisation d'une valeur erronée n'est plus possible.
Il est à noter cependant, que deux données différentes seront utiles.
En effet dans notre cas, le pilotage à besoin d'une donnée différente de celle de l'affichage.
Il faudra donc opérer une mise à l’échelle vers une valeur adéquate de pilotage.
Soit de 0 à 255 PWM.
Cela implique deux variables différentes. L'une pour l'activation de l'affichage et l'autre pour le pilotage.
La saisie de la donnée.
En bref, si on laisse la possibilité d'une saisie non limitée, nous avons trois modes de saisie.
- Non limité. (Paramètre 0).
- Valeur maximum. (Paramètre 1).
- Pourcentage. (Paramètre 2).
Incrémenter une donnée pour des projets nécessitant jusqu'à 360° ou 800 mm serait évidemment un peu long. Par conséquent, il est judicieux d'agir sur chaque chiffre du nombre composant la donnée.
De toute évidence, en saisissant chaque chiffre, la donnée ne pourra pas être supérieure à neuf (9) ou inférieure à zéro (0). Elle évoluera donc entre ces deux bornes, ce qui nous permet néanmoins, de saisir des valeurs allant de 0 à 9999 au besoin.
La fonction saisie (mode,X,Y,Z) est là pour contrôler la saisie de la donnée.
Elle a comme paramètre la variable "mode" pour la sélection du mode de saisie et pour chaque chiffre X, Y et Z, la valeur maximum de la donnée.
En fonction du mode de saisie choisie, elle adapte la grandeur de saisie pour chaque chiffre de la donnée. Elle met à l’échelle ou recompose la donnée saisie puis la charge pour l'affichage et renvoie la valeur de pilotage.
- En mode pourcentage:
La saisie est immédiate. Pour apporter plus de souplesse à la saisie, la correction de donnée est réalisée depuis la valeur actuelle. - En mode numérique:
Par contre, la saisie se fait au troisième et dernier chiffre saisi. La donnée est ensuite chargée dans une variable prévue pour le pilotage et l'affichage de la sélection. Dans notre cas, c'est l'unité du nombre 255. La correction de données reprendra depuis zéro.
Le programme sera donc exploitable en fonction du mode de saisie choisi et de la grandeur de la donnée.
Note : libre à vous de modifier la valeur maxi de la donnée et l'affichage de l'unité dans le menu.
3.4 Le nombre d'organes à piloter.
Le nombre d'organes à piloter définira le nombre de fenêtre de sélection à créer dans votre menu.
Ici, nous avons seulement deux LED à piloter.
Vous pouvez bien-sûr en fonction des capacités de votre carte et des besoins de votre projet, ajouter autant de fenêtre de sélection que vous le souhaitez. Afin de compléter l'exemple nous en avons crée trois de plus.
Nous pouvons, à présent, passer au montage de notre menu.
4 Le menu.
Avant de se lancer dans la programmation d'un menu, il faut avant tout avoir un repère de travail. Ce qui veut dire, penser à la structure et établir un schéma représentatif du menu.
Voici un schéma représentatif de la structure du menu avec les actions utiles pour passer d'une fenêtre à l'autre.
A première vue, une action sur les boutons implique une sélection de fenêtres. A chaque fenêtre est attribuée un numéro. Ces numéros permettent d'activer l'affichage et de verrouiller une position dans le menu.
Il y a deux "sous fenêtres". La onze (11) permet de verrouiller l'étape de la sélection des LED et la douze (12) permet de verrouiller l'étape de paramétrage.
La fenêtre de sélection "RAZ" est en fait, l’accès à un sous-menu dans lequel, il nous est possible de mettre à zéro toutes les données par la sélection du choix OUI (O) ou NON (N). Voici donc la structure de ce sous-menu "RAZ".
3.2 Les fenêtres.
Pour créer le menu, il faut utiliser la fonction menu().
Elle permet de générer l'affichage des fenêtres.
L'activation des affichages des fenêtres se fait en fonction des actions sur les boutons et la position actuelle verrouillée dans le menu.
Pour cette raison, la fonction à pour paramètre la variable de retour "action" de la fonction clavier().
Ci-dessous, l'illustration du menu.
Voyons maintenant comment va se dérouler la validation de la donnée.
4 Validation de données.
Durant la saisie en cours, l'actualisation de la valeur se fait dans la boucle principale (loop).
Une fois la sélection validée, la fenêtre de paramétrage est active, on peut alors saisir une valeur, puis la valider. Cette valeur est ensuite affectée à une variable prévue au pilotage de la sélection et à l'affichage.
Pour finir, l'affichage retourne à la fenêtre de lecture. Dans notre exemple, celle de la LED une (1) et deux (2).
C'est ainsi que le programme LCD MENU se termine !
Partant de cet exemple, vous pouvez piloter d'autres systèmes que des LED. Comme des systèmes équipés de sondes de température, de servomoteurs ou bien de moteurs à courant continu et bien d'autres.
FIN.
Vous avez là un premier outil d'exploitation d'écran LCD. Vous pouvez à présent créer votre propre menu et opérer une saisie de données à transmettre à votre système. Explorez et amusez vous à l'adapter à vos projets.
En téléchargeant le sketch "LCD_MENU ARDUINO" vous découvrirez sans difficulté la construction des différentes fonctions. Ces fonctions ne contiennent aucune particularité que nous n'ayons pas abordé jusque là, voici donc pourquoi nous ne les détaillerons pas.
Remarque: Il est possible d'utiliser des bibliothèques que vous trouverez sur le net . Mais, ce projet a pour but de faire comprendre et maîtriser les différentes méthodes de base de la bibliothèque <<LiquidCrystal.h>> et l'exploitation d'un écran LCD.
Un tableau string aurait également pu être utilisé pour générer les affichages. Mais pour plus de lisibilité, nous n'avons pas utilisé cette méthode.
Nous vous invitons à nous faire part de vos commentaires et propositions.
MERCI.
Plaisir Arduino.fr
Recevez gratuitement les codes sources de PlaisirArduino
Amusez-vous tout de suite avec les entrées/sorties de votre carte Arduino Uno
Vous y retrouverez : des scketchs, des schémas et des PDF