top of page

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);
    }
  }

bottom of page