Afficher des pictos sur une matrice de led 8X8

Auteur avatarAntony Le Goïc-Auffret | Dernière modification 11/12/2020 par Antonydbzh

Afficher des pictos sur une matrice de led 8X8 matriceled8X8coeur.jpg

Introduction

Les matrices de Led 8X8 permettent d'afficher des images facile à fabriquer, nous allons voir comment.
  • Fichiers

Étape 1 - Réunissez le matériel près de votre ordinateur




Étape 2 - Préparer Arduino et les images

Nous allons utiliser la bibliothèque LedControl (pour l'installer cliquer "outil" puis "Gérer les bibliothèques" est dans la recherche vous tapez LedControl et suivez les instructions).

Pour afficher un smiley, c'est avec le programme suivant :
/////////////////////////////////
//                             //
//      Afficher des Pictos .  //
//  Sur une matrice de LED 8X8 //
//                             //
/////////////////////////////////
/*                                        +-----+
             +----[PWR]-------------------| USB |--+
             |                            +-----+  |
             |         GND/RST2  [ ][ ]            |
             |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] | 
             |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   
             |                             AREF[ ] |
             |                              GND[ ] |
             | [ ]N/C                    SCK/13[ ] |  
             | [ ]IOREF                 MISO/12[X] |   DataIn (ou Din)
             | [ ]RST                   MOSI/11[X]~|   CLK (pour Clock)
             | [ ]3V3    +---+               10[X]~|   CS (Load)
       VCC   | [X]5v    -| A |-               9[ ]~|   
       GND   | [X]GND   -| R |-               8[ ] |  
             | [ ]GND   -| D |-                    |
             | [ ]Vin   -| U |-               7[ ] |    
             |          -| I |-               6[ ]~|    
             | [ ]A0    -| N |-               5[ ]~|    
             | [ ]A1    -| O |-               4[ ] |    
             | [ ]A2     +---+           INT1/3[ ]~|    
             | [ ]A3                     INT0/2[ ] |    
             | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
             | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
             |            [ ] [ ] [ ]              |
             |  UNO_R3    GND MOSI 5V  ____________/
              \_______________________/

Matériel :
- un Arduino
- une matrice de LED MAX7219.
- Quelques cable dupont

Programme inspiré des exemples de la bibliothèque "LedControl.h"

   ___
 / ___ \
|_|   | |
     /_/ 
     _   ___   _ 
    |_| |___|_| |_
         ___|_   _|
        |___| |_|
Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
Antony Le Goïc-Auffret
*/
#include "LedControl.h"

LedControl lc=LedControl(12,11,10,1);  // On défini un ensemble de matrice de led "lc". Dans l'ordre, on branche les broches Din sur la broche 12, CLK sur 11, CS sur 10. 
// le dernier chiffre indique le nombre de matrice de LED (il peut y en avoir jusqu'à 8). 
// ici on n'en a qu'une.

void setup()
{
  lc.shutdown(0,false);  // Allule la matrice de led
  lc.setIntensity(0,1);  // règle la luminosité (de 1 à 15) de la matrice en postion 0 (la première et la seule dans notre exemple).
  lc.clearDisplay(0);    // efface la matrice (éteint toute les led).
}

void loop()
{
lc.setRow(0,0,B00111100); // la fonction setRow s'utilise en mettant la position de la matrice, le numéro de ligne et l'octet qui gère la ligne. setRow(int adress, int ligne, byte octet).
lc.setRow(0,1,B01000010);
lc.setRow(0,2,B10100101);
lc.setRow(0,3,B10000001);
lc.setRow(0,4,B10100101);
lc.setRow(0,5,B10011001);
lc.setRow(0,6,B01000010);
lc.setRow(0,7,B00111100); // Utilisez les documents de wikidébrouillard pour créer votre propres images.
}
Vous le copiez et le collez dans un fichier Arduino.




Étape 3 - Créez vos propres images

Vous pouvez utiliser le fichier disponible dans la liste du matériel pour vous aider à dessiner des image en "Pixel Art" et en déduire le code à mettre dans le programme Arduino.




Étape 4 - Réaliser des animations : Space Invaders

Le cinéma c'est c'est une succession d'images, nous allons faire pareil avec le code suivant.
/////////////////////////////////
//                             //
//         Space Invader       //
//  Sur une matrice de LED 8X8 //
//                             //
/////////////////////////////////
/*                                        +-----+
             +----[PWR]-------------------| USB |--+
             |                            +-----+  |
             |         GND/RST2  [ ][ ]            |
             |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] | 
             |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   
             |                             AREF[ ] |
             |                              GND[ ] |
             | [ ]N/C                    SCK/13[ ] |  
             | [ ]IOREF                 MISO/12[X] |   DataIn (ou Din)
             | [ ]RST                   MOSI/11[X]~|   CLK (pour Clock)
             | [ ]3V3    +---+               10[X]~|   CS (Load)
       VCC   | [X]5v    -| A |-               9[ ]~|   
       GND   | [X]GND   -| R |-               8[ ] |  
             | [ ]GND   -| D |-                    |
             | [ ]Vin   -| U |-               7[ ] |    
             |          -| I |-               6[ ]~|    
             | [ ]A0    -| N |-               5[ ]~|    
             | [ ]A1    -| O |-               4[ ] |    
             | [ ]A2     +---+           INT1/3[ ]~|    
             | [ ]A3                     INT0/2[ ] |    
             | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
             | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
             |            [ ] [ ] [ ]              |
             |  UNO_R3    GND MOSI 5V  ____________/
              \_______________________/

Matériel :
- un Arduino
- une matrice de LED MAX7219.
- Quelques cable dupont

Programme inspiré des exemples de la bibliothèque "LedControl.h"

   ___
 / ___ \
|_|   | |
     /_/ 
     _   ___   _ 
    |_| |___|_| |_
         ___|_   _|
        |___| |_|
Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
Antony Le Goïc-Auffret
*/
#include "LedControl.h"

LedControl lc=LedControl(12,11,10,1);   // On défini un ensemble de matrice de led "lc". Dans l'ordre, on branche les broches Din sur la broche 12, CLK sur 11, CS sur 10. 
// le dernier chiffre indique le nombre de matrice de LED (il peut y en avoir jusqu'à 8). 
// ici on n'en a qu'une.

unsigned long dureeImage=200;  // Durée d'affichage de chaque image

// Pour créer une image, il faut allumer ou éteindre certaines led
// Les valeurs qui gèrent l'allumage de chaque LED sont dans un tableau (0 = led éteinte, 1 = Led Allulmée).
byte invader1a[] =
{
   B00011000,  // Première image de l'envahisseur1
   B00111100,
   B01111110,
   B11011011,
   B11111111,
   B00100100,
   B01011010,
   B10100101
};

byte invader1b[] =
{
  B00011000, // Seconde image de l'envahisseur1
  B00111100, // chaque octet encode l'allumage de chaque LED d'une ligne.
  B01111110,
  B11011011,
  B11111111,
  B00100100,
  B01011010,
  B01000010
};

byte invader2a[] =
{
  B00100100, // Première image de l'envahisseur2
  B00100100,
  B01111110,
  B11011011,
  B11111111,
  B11111111,
  B10100101,
  B00100100
};

byte invader2b[] =
{
  B00100100, // Seconde image de l'envahisseur2
  B10100101,
  B11111111,
  B11011011,
  B11111111,
  B01111110,
  B00100100,
  B01000010
};

void setup()
{
  lc.shutdown(0,false);  // Allule la matrice de led
  lc.setIntensity(0,1);  // règle la luminosité (de 1 à 15) de la matrice en postion 0 (la première et la seule dans notre exemple).
  lc.clearDisplay(0);    // efface la matrice (éteint toute les led).
}

//  Prendre les valeurs dans les tableaux et les afficher
void sinvader1a()
{
  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(0,i,invader1a[i]); // La fonction setRow allume chaque les LEDs de chaque ligne en appellant chaque octet.
  }
}

void sinvader1b()
{
  for (int i = 0; i < 8; i++)
  {
    lc.setRow(0,i,invader1b[i]);
  }
}

void sinvader2a()
{
  for (int i = 0; i < 8; i++)
  {
    lc.setRow(0,i,invader2a[i]);
  }
}

void sinvader2b()
{
  for (int i = 0; i < 8; i++)
  {
    lc.setRow(0,i,invader2b[i]);
  }
}

void attac1()
{   // pour animer l'envahisseur, on affiche les deux images alternativement 10 fois
    for (int i=0; i <= 10; i++){
    sinvader1a();
    delay(dureeImage);
    sinvader1b();
    delay(dureeImage);
    }
}

void attac2()
{   // pour animer l'envahisseur, on affiche les deux images alternativement 10 fois
    for (int i=0; i <= 10; i++){ 
    sinvader2a();
    delay(dureeImage);
    sinvader2b();
    delay(dureeImage);
    }
}

void loop()
{ 
  attac1(); // On affiche le premier envahisseur
  lc.clearDisplay(0);  // on efface l'affichage
  delay(200);
  attac2();// On affiche le second envahisseur
  lc.clearDisplay(0);  // on efface l'affichage
  delay(200);
}


Étape 5 - Brancher la matrice de LED

Suivez les indication du programme :

  • GND -> GND
  • VCC -> +5V
  • DIN -> broche 12
  • CS -> broche 10
  • CLK -> broche 11




Éléments pédagogiques


Sources et ressources

Le site de l'artiste qui colle des space invaders sur les murs des villes du monde.

Un site permettant d'encoder des image et de créer facilement des animations : Led Matrix Editor

Dernière modification 11/12/2020 par user:Antonydbzh.

Commentaires

Published