mardi 18 juillet 2017

Afficheur 8 chiffres, 8 LEDs, 8 boutons TM1638 et Arduino

Vous pouvez facilement trouver sur eBay des modules constitués de 8 afficheurs 7 segments, 8 LEDs et 8 boutons, dont la pièce maîtresse est un circuit intégré TM1638 (mon modèle porte la mention "LED AND KEY").

Même s'il est peu probable que vous ayez besoin de la totalité des composants qu'il contient, un tel module peut grandement faciliter la mise au point d'un prototype, d'autant plus qu'il n'accapare que 3 entrées/sorties de votre microcontrôleur.

Ce court tutoriel vous indiquera comment brancher un tel module à votre carte Arduino, et comment utiliser les différents éléments qui le composent.

Connexions

Le module comporte 5 connecteurs, qui seront branchés à l'Arduino de la façon suivante:

VCC du module TM1638 :  5V de l'Arduino
GND du module TM1638:  GND de l'Arduino
STB* (strobe) du module TM1638:  pin 4 de l'Arduino
CLK* (clock) du module TM1638:  pin 2 de l'Arduino
DIO* (digital input output) du moduleTM1638:  pin 3 de l'Arduino

*: Les connecteurs STB, CLK et DIO peuvent être branchés à d'autres pins de l'Arduino si désiré:  il s'agira de modifier les sketches proposés ci-dessous pour en tenir compte.



Installation de la bibliothèque

Nous allons utiliser la bibliothèque conçue par Ricardo Batista spécialement pour ce type de module. Il y a évidemment une page github d'où on peut télécharger la bibliothèque, afin de l'installer dans l'IDE Arduino.

Pendant que vous y êtes, le wiki de cette même page github dresse la liste de toutes les fonctions (ou devrais-je dire "méthode"?) de cette bibliothèque.

Initialisation de la bibliothèque

Dans chaque sketch qui utilise cette bibliothèque, on créé un objet de type "TM1638" en précisant, dans l'ordre, le numéro de la pin reliée à DIO, CLK et STB.

Puisque nous avons branché DIO à 3, CLK à 2 et STB à 4, je peux donc utiliser la syntaxe suivante:

TM1638 afficheur(3, 2, 4);

...où "afficheur" est le nom que j'ai choisi pour désigner cet objet.

Afficher des nombres

La bibliothèque TM1638 met à notre disposition plusieurs fonctions permettant d'afficher des nombres grâces aux 8 afficheurs à 7 segments:

setDisplayToDecNumber:  pour afficher un nombre décimal positif
setDisplayToSignedDecNumber: pour afficher un nombre décimal positif ou négatif
setDisplayToBinNumber:  pour afficher un nombre binaire
setDisplayToHexNumber:  pour afficher un nombre hexadécimal
setDisplayToString:  pour afficher des lettres plutôt que des nombres
clearDisplay:  pour effacer ce qui était précédemment affiché

Il est également possible de réglez un des 8 chiffres en particulier (plutôt que l'ensemble du nombre à 8 chiffres) en utilisant setDisplayDigit et clearDisplayDigit.

Penchons-nous sur la fonction "setDisplayToDecNumber", puisque c'est celle qui me semble la plus utile.  Elle comporte 3 arguments:
  1.  un ombre de type "long" qui est le nombre à afficher
  2.  un byte indiquant le ou les points décimaux qui doivent être  allumés
  3.  un booléen indiquant si les zéros qui précèdent le nombre doivent être affichée (True) ou non (False).
Par exemple:

"afficheur.setDisplayToDecNumber(12345, 0, true);"     affichera "00012345"
"afficheur.setDisplayToDecNumber(12345, 0, false);"     affichera "12345"
"afficheur.setDisplayToDecNumber(12345, 0b0001000 , false);"     affichera "12.345"
"afficheur.setDisplayToDecNumber(12345, 0b11111111 , true);"     affichera "0.0.0.1.2.3.4.5."

C'est dommage que la bibliothèque n'offre pas une fonction qui permettrait d'afficher un nombre décimal (float) sans qu'on soit forcé de placer nous-mêmes le point décimal à l'endroit approprié.

L'exemple ci-dessous est un simple compteur dont la valeur augmente d'une unité à chaque seconde.

Allumer des LEDs

La fonction "setLED" comporte deux arguments:

  1. La couleur de la LED:  TM1638_COLOR_RED, TM1638_COLOR_GREEN ou TM1638_COLOR_NONE (LED éteinte).  Sur certains module, les LEDs peuvent s'allumer en rouge ou en vert.  Mon module ne comporte que des LEDs rouges.
  2. Le numéro de la LED qu'on désire allumer ou éteindre, de 0 à 7 (La LED 0 est celle qui est située à gauche du module).

L'exemple ci-dessous allume successivement chaque LED, de gauche à droite.

Lire l'état des boutons

La fonction "getButtons" retourne un octet qui décrit l'état de chaque bouton.  Le bit est à 1 si le bouton correspondant est enfoncé, et à 0 s'il ne l'est pas.

Par exemple, si vous appuyez sur le deuxième bouton à partir de la gauche (S2), getButtons retourne la valeur binaire "01000000".  Grâce à la fonction bitRead (qui est une fonction régulière Arduino et non une fonction spécifique à la bibliothèque), il est facile de vérifier l'état de chaque bouton.

L'exemple ci-dessous indique dans le moniteur série le numéro du bouton enfoncé.


À lire également:

Yves Pelletier
   (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire