Afficheurs 7 Segments

Plusieurs exemples d'utilisation d'un afficher 7 segments.

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