DIGIT-01 - Exemple simple
// ------------------------------------------------------------------------- // Arduino 7 segment display example software // ------------------------------------------------------------------------- // http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html // License: http://www.opensource.org/licenses/mit-license.php (Go crazy) // Define the LED digit patters, from 0 - 9 // Note that these patterns are for common cathode displays // For common anode displays, change the 1's to 0's and 0's to 1's // 1 = LED on, 0 = LED off, in this order: // Arduino pin: 2,3,4,5,6,7,8 // -------------------------------------------------------------------------- // NE PAS OUBLIER DE CONNECTER LA PIN 3 de l'afficheur au Ground de l'arduino // -------------------------------------------------------------------------- #define NbForme 21 // Tableau des formes affichables (chiffres et lettres) byte seven_seg_digits[NbForme][7] = { { 1,1,1,1,1,1,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,0,1,1,1,1,1 }, // = 6 { 1,1,1,0,0,0,0 }, // = 7 { 1,1,1,1,1,1,1 }, // = 8 { 1,1,1,0,0,1,1 }, // = 9 { 1,1,1,0,1,1,1 }, // = A { 0,0,1,1,1,1,1 }, // = b { 1,0,0,1,1,1,0 }, // = C { 0,1,1,1,1,0,1 }, // = d { 1,0,0,1,1,1,1 }, // = E { 1,0,0,0,1,1,1 }, // = F { 0,1,1,0,1,1,1 }, // = H { 0,1,1,1,0,0,0 }, // = J { 0,0,0,1,1,1,0 }, // = L { 1,1,0,0,1,1,1 }, // = P { 0,1,1,1,1,1,0 } // = U }; // ------------------- // Setup du programme // ------------------- void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); writeDot(0); // start with the "dot" off } // ----------------- // Boucle principale // ----------------- void loop() { for (byte count = 0; count < NbForme; ++count) { sevenSegWrite(count); delay(1000); } writeDot(1); // Allume le point delay(3000); writeDot(0); // Eteind le point } // ------------------------- // Fonction Allume le point // ------------------------- void writeDot(byte dot) { digitalWrite(9, dot); } // ---------------------------------- // Dessine la forme sur l'afficheur // ---------------------------------- void sevenSegWrite(byte digit) { byte pin = 2; for (byte segCount = 0; segCount < 7; ++segCount) { digitalWrite(pin, seven_seg_digits[digit][segCount]); ++pin; } }
DIGIT-02 - Amélioration DIGIT-01
// ------------------------------------------------------------------------- // Arduino 7 segments display example software DIGIT-02 (CC 2015) // -------------------------------------------------------------------------- // Application : // Affiche les formes du tableau puis lance les animations // ------------------------------------------------------------------------- // Base de DIGIT-01 // Define the LED digit patters, from 0 - 9 // Note that these patterns are for common cathode displays // For common anode displays, change the 1's to 0's and 0's to 1's // 1 = LED on, 0 = LED off, in this order: // Avant Arduino pin: 2,3,4,5,6,7,8 (VOIR EXEMPLE DIGIT-01) // Apres Arduino pin: 1,2,3,4,5,6,7 // -------------------------------------------------------------------------- // NE PAS OUBLIER DE CONNECTER LA PIN 3 de l'afficheur au Ground de l'arduino // -------------------------------------------------------------------------- // Utilisation des commande PORTD pour allumer directement les Leds de l'afficheur // (Evite les boucles ...) // Attention, dans le tableau des Byte, // on part de la droite vers la gauche et le premier digit à droite est toujours// zéro Exemple : // Chiffre 1 (Allumer segment B,C) -> B00001100 // Chiffre 2 (Allumer segment A,B,D,E,G) -> B10110110 // ------------------------------------------------------------------------------- #define NbForme 21 // Tableau des formes affichables byte seven_seg_digits[NbForme] = { B01111110, // = 0 B00001100, // = 1 B10110110, // = 2 B10011110, // = 3 B11001100, // = 4 B11011010, // = 5 B11111010, // = 6 B00001110, // = 7 B11111110, // = 8 B11001110, // = 9 B11101110, // = A B11111000, // = b B01110010, // = C B10111100, // = d B11110010, // = E B11100010, // = F B11101100, // = H B00011100, // = J B01110000, // = L B11100110, // = P B01111100 // = U }; // ------------------- // Setup du programme // ------------------- void setup() { DDRD = B11111110; // PIN 1 a 7 EN OUTPUT pinMode(9, OUTPUT); writeDot(0); // start with the "dot" off } // ----------------- // Boucle principale // ----------------- void loop() { for (byte count = 0; count < NbForme; ++count) { PORTD = seven_seg_digits[count]; delay(500); } writeDot(1); // Allume le point delay(3000); writeDot(0); // Eteind le point Anime(1); // Lancement animation sens horaire Anime(2); // Lancement animation sens anti horaire } // ------------------------- // Fonction Allume le point // ------------------------- void writeDot(byte dot) { digitalWrite(9, dot); } // -------------------------------------------------------------- // Animation // ON fait tourner les Led sur l'afficheur (Dans le sens demandé) // _Sens=1 sens horaire // _Sens=2 sens anti horaire // _sens=3 Parcours du huit // -------------------------------------------------------------- void Anime(int _sens) { byte bAnim = B00000000; PORTD = bAnim; delay(500); int x = 0; do { if (_sens == 1) { bAnim = B00000001; // Initialisation Sens horaire } if (_sens == 2) { bAnim = B10000000; // Initialisation Sens anti Horaire } for (byte count = 0; count < 6; ++count) { if (_sens == 1) { bAnim = bAnim << 1; // Sens horaire (decallage a gauche) } if (_sens == 2) { bAnim = bAnim >> 1; // Sens anti horaire (decallage a droite) } PORTD = bAnim; delay(100); } x++; } while (x < 5); }DIGIT-03 - Dé électronique sur afficheur 7 segments// ------------------------------------------------------------------------- // Arduino 7 segments display example software DIGIT-03 (CC 2015) // -------------------------------------------------------------------------- // Application : // Dé électronique sur afficheur // Appui sur le bouton, lance le dé // Le dot clignote pendant l'attente // ------------------------------------------------------------------------- // Base de DIGIT-01 // Define the LED digit patters, from 0 - 9 // Note that these patterns are for common cathode displays // For common anode displays, change the 1's to 0's and 0's to 1's // 1 = LED on, 0 = LED off, in this order: // Avant Arduino pin: 2,3,4,5,6,7,8 (VOIR EXEMPLE DIGIT-01) // Apres Arduino pin: 1,2,3,4,5,6,7 // -------------------------------------------------------------------------- // NE PAS OUBLIER DE CONNECTER LA PIN 3 de l'afficheur au Ground de l'arduino // -------------------------------------------------------------------------- // Utilisation des commande PORTD pour allumer directement les Leds de l'afficheur // (Evite les boucles ...) // Attention, dans le tableau des Byte, // on part de la droite vers la gauche et le premier digit a droite est toujours// zéro Exemple : // Chiffre 1 (Allumer segment B,C) -> B00001100 // Chiffre 2 (Allumer segment A,B,D,E,G) -> B10110110 // ------------------------------------------------------------------------------- #define NbForme 6 // Tableau des formes affichables byte seven_seg_digits[NbForme] = { B00001100, // = 1 B10110110, // = 2 B10011110, // = 3 B11001100, // = 4 B11011010, // = 5 B11111010, // = 6 }; int DotPin=9; int DotState=LOW; int ClignInterval=500; unsigned long ClignPrev; int BoutonPin=12; int BoutonState; long Valde; // ------------------- // Setup du programme // ------------------- void setup() { DDRD = B11111110; // PIN 1 a 7 EN OUTPUT pinMode(DotPin, OUTPUT); pinMode(BoutonPin,INPUT); randomSeed(analogRead(13)); // Initialisation du gnrateur aleatoire } // ----------------- // Boucle principale // ----------------- void loop() { Clignote(); BoutonState=digitalRead(BoutonPin); if (BoutonState == HIGH) { LanceDe(); } } // ------------------------------------------- // Fonction autonome de clignotement du point // ------------------------------------------- void Clignote() { if((millis()-ClignPrev) > ClignInterval) { ClignPrev=millis(); DotState=!DotState; digitalWrite(DotPin, DotState); } } // ----------------------------- // Lancement du dé electronique // ----------------------------- void LanceDe() { // On boucle dix fois for (int i=0; i <= 10; i++) { // Initialisation du nombre aleatoire Valde=random(1, 7); PORTD = seven_seg_digits[Valde-1]; // Affichage de plus en plus lent delay(50+(i* 80)); } }
Aucun commentaire:
Enregistrer un commentaire