LE MODULE LED & KEY
Le module LED & KEY comporte un circuit intégré TM1638 capable de gérer 8 afficheurs 7 segments, 8 led et 8 boutons poussoirs. Ce module, alimenté sous 5V, présente l'énorme avantage de communiquer avec la carte Arduino grâce à une liaison série composée de trois fils ; le signal de donnée DIO, le signal d'horloge CLK et le signal de sélection STB. Ce bus ressemble fortement à un bus SPI mais cela n'en n'est pas un !!!
La bibliothèque TM1638 gérant ce module est téléchargeable ici et ses principales fonctions sont :
-
TM1638 module. Cette fonction permet de créer l'objet.
Pour la gestion des led :
-
setLED(etat, numéro). Cette fonction permet d'allumer (lorsque état=1) ou éteindre (lorsque état=0) la led numéro. Attention la led0 est située à gauche du module et porte le nom LED1.
-
setLEDS(nombre). Cette fonction permet d'allumer les led en fonction du nombre.
Pour la gestion des afficheurs :
-
clearDisplay(). Cette fonction permet d'effacer les 8 afficheurs.
-
setDisplayToDecNumber(nombre, points_decimaux, zero). Cette fonction permet d'afficher un nombre décimal. Nous pouvons préciser l'allumage des points décimaux de chaque afficheur et ajouter des 0 devant le nombre si zero=1.
Ex : module.setDisplayToDecNumber(110268, 0b00010100,0) affiche 11.02.68 sur les afficheurs de droite.
-
setDisplayToSignedDecNumber(nombre, points_decimaux, zero). Cette fonction permet d'afficher un nombre décimal positif ou négatif.
Ex : module.setDisplayToSignedDecNumber(-110268, 0b00000100,1) affiche -01102.68.
-
setDisplayToBinNumber(nombre, points_decimaux, zero). Cette fonction permet d'afficher un nombre binaire. Nous pouvons préciser l'allumage des points décimaux de chaque afficheur et ajouter des 0 devant le nombre si zero=1.
Ex : module.setDisplayToBinNumber(11100, 0, 0) affiche 11100 sur les afficheurs de droite.
-
setDisplayToHexNumber(nombre, points_decimaux, zero). Cette fonction permet d'afficher un nombre hexadécimal. Nous pouvons préciser l'allumage des points décimaux de chaque afficheur et ajouter des 0 devant le nombre si zero=1.
Ex : module.setDisplayToHexNumber(108, 0, 1) affiche 0000006C.
-
setDisplayDigit(chiffre, position, point_decimal). Cette fonction permet d'afficher un chiffre en choisissant la position et un point décimal.
Ex : module.setDisplayToHexNumber(8, 4, 1) affiche 8. sur le quatrième afficheur.
-
clearDisplayDigit(position, points_decimaux). Cette fonction permet d'effacer l'afficheur défini par sa position.
Pour la gestion des boutons :
-
getButtons(). Cette fonction retourne un octet dont la valeur est fonction de l'état des boutons.
Exemple :
Nous souhaitons réaliser un compte à rebours. Les boutons S8, S7 et S6 permettent respectivement d'incrémenter le compteur de 1, 10 et 100. Un appui sur le bouton S2 remet à zéro la valeur du compteur. Le compte à rebours est déclenché par le bouton S1.
Lors d'un appui sur un bouton, la led correspondante s'allume. Lorsque le compte à rebours arrive à terme, les led clignotent quatre fois.
Liste du matériel :
-
1 Arduino Uno
-
1 module LED&KEY
Câblage :
Programme :
/*TM1638 est un programme qui réalise un compte à rebours. Les boutons S8, S7 et S6 permettent respectivement d'incrémenter le compteur de 1, 10 et 100. Un appui sur le bouton S2 remet à zéro la valeur du compteur. Le compte à rebours est déclenché par le bouton S1.
Lors d'un appui sur un bouton, la led correspondante s'allume. Lorsque le compte à rebours arrive à terme, les led clignotent quatre fois.
*/
#define STB 2 // affectation des broches
#define CLK 3
#define DIO 4
long compteur = 0;
byte bouton;
boolean depart=0;
#include <TM1638.h> // appel de la bibliothèque
TM1638 module(DIO, CLK, STB); // création de l'objet module
void setup()
{
}
void loop()
{
if (depart==0) // avant le lancement du compte à rebourds
{
bouton = module.getButtons(); // acquisition de l'état des boutons
module.setLEDs(((bouton & 0xFF) << 8) | (bouton & 0xFF)); // allumage des led
bouton = module.getButtons(); // acquisition de l'état des boutons
delay(100);
module.setLEDs(((bouton & 0xFF) << 8) | (bouton & 0xFF)); // allumage des led
switch (bouton) // gestion des boutons
{
case 128:
compteur = compteur + 1;
break;
case 64:
compteur = compteur + 10;
break;
case 32:
compteur = compteur + 100;
break;
case 2:
compteur = 0;
break;
case 1:
depart = 1;
break;
default:
module.setLEDs(0x00);
break;
}
module.setDisplayToDecNumber(compteur, 0 , 1); // affichage du compteur
}
if ((depart==1)&&(compteur>0)) // si le compte à rebours est lancé
{
compteur--;
delay(1000);
module.setDisplayToDecNumber(compteur, 0 , 1);
}
if ((depart==1)&&(compteur==0)) // si le compte à rebours a été lancé et si le compteur est égal à 0
{
depart=0;
for (int i=0;i<5;i++) // clignotement des led
{
module.setLEDs(0xFF);
delay(250);
module.setLEDs(0x00);
delay(250);
}
}