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