Afficher des pictos sur une matrice de led 8X8 : Différence entre versions

Ligne 1 : Ligne 1 :
 
{{Tuto Details
 
{{Tuto Details
 +
|Main_Picture=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8coeur.jpg
 
|Licences=Attribution (CC-BY)
 
|Licences=Attribution (CC-BY)
 
|Description=Comment créer des pictogrammes ou des images pour les afficher sur une matrice de Led 8X8
 
|Description=Comment créer des pictogrammes ou des images pour les afficher sur une matrice de Led 8X8
Ligne 8 : Ligne 9 :
 
|Tags=space-invaders
 
|Tags=space-invaders
 
}}
 
}}
{{Introduction}}
+
{{Introduction
 +
|Introduction=Les matrices de Led 8X8 permettent d'afficher des images facile à fabriquer, nous allons voir comment.
 +
}}
 
{{Materials
 
{{Materials
 
|ItemList={{ItemList
 
|ItemList={{ItemList
Ligne 24 : Ligne 27 :
 
}}
 
}}
 
{{Separator}}
 
{{Separator}}
{{Tuto Step}}
+
{{Tuto Step
 +
|Step_Title=Réunissez le matériel près de votre ordinateur
 +
|Step_Picture_00=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8materielb.jpg
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Préparer Arduino et les images
 +
|Step_Content=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 :<pre>
 +
/////////////////////////////////
 +
//                            //
 +
//      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.
 +
}
 +
</pre>Vous le copiez et le collez dans un fichier Arduino.
 +
|Step_Picture_00=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8coeur2.jpg
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Créez vos propres images
 +
|Step_Content=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.
 +
|Step_Picture_00=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8-outilImage.png
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Réaliser des animations : Space Invaders
 +
|Step_Content=Le cinéma c'est c'est une succession d'images, nous allons faire pareil avec le code suivant.<pre>
 +
/////////////////////////////////
 +
//                            //
 +
//        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);
 +
}
 +
</pre>
 +
|Step_Picture_00=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8-invaderA.jpg
 +
|Step_Picture_01=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8-invaderB.jpg
 +
|Step_Picture_02=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8invader2.jpg
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Brancher la matrice de LED
 +
|Step_Content=Suivez les indication du programme :
 +
* GND -> GND
 +
* VCC -> +5V
 +
* DIN -> broche 12
 +
* CS -> broche 10
 +
* CLK -> broche 11
 +
|Step_Picture_00=Afficher_des_pictos_sur_une_matrice_de_led_8X8_matriceled8X8_bb.png
 +
}}
 
{{Notes
 
{{Notes
 
|Notes=Le [https://space-invaders.com/about/ site de l'artiste qui colle des space invaders] sur les murs des villes du monde.
 
|Notes=Le [https://space-invaders.com/about/ site de l'artiste qui colle des space invaders] sur les murs des villes du monde.
Ligne 31 : Ligne 321 :
 
}}
 
}}
 
{{Tuto Status
 
{{Tuto Status
|Complete=Draft
+
|Complete=Published
 
}}
 
}}

Version du 15 décembre 2018 à 22:02

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