Go Down

Topic: [Résolu] Affichage 7 segments (Read 511 times) previous topic - next topic

Morolag

Jun 29, 2014, 01:47 pm Last Edit: Jul 02, 2014, 10:44 am by Snootlab Reason: 1
Bonjour à tous,

Je suis débutant dans le monde de l'Arduino et j'avance petit à petit en suivant un tutoriel.
J'en suis arrivé à l'afficheur 7 segments et je rencontre un problème avec mon programme.

Je tente simplement d'afficher tous les chiffre l'un après l'autre en partant d'une variable déclarée et initialisée à 0 en passant par une boucle for et en effectuant une série de test.

Voici le programme pour y voir plus clair:

Quote
// Affichage de tous les chiffres l'un après les autres
 
 int i;
 int segmentB=6;
 int DP=5;
 int segmentC=4;
 int segmentD=3;
 int segmentE=2;
 int segmentA=7;
 int segmentF=8;
 int segmentG=9;
 

void setup()           // Fonction d'initialisation de la carte
{
  pinMode(segmentA,OUTPUT);
  pinMode(segmentB,OUTPUT);
  pinMode(segmentC,OUTPUT);
  pinMode(segmentD,OUTPUT);
  pinMode(segmentE,OUTPUT);
  pinMode(segmentF,OUTPUT);
  pinMode(segmentG,OUTPUT);
  pinMode(DP,OUTPUT);   // Initialisation des broches comme étant des sorties
}

void loop()            // Fonction principale, elle se répète à l'infini
{
 
    i=0;
   
    for(i=0;i<10;i++)
    {
     
      if (i==0)
       
          digitalWrite(segmentA,LOW);
          digitalWrite(segmentB,LOW);
          digitalWrite(segmentC,LOW);
          digitalWrite(segmentD,LOW);
          digitalWrite(segmentE,LOW);
          digitalWrite(segmentF,LOW);
          digitalWrite(segmentG,HIGH);
          digitalWrite(DP,LOW);
       
       
       delay(2000);
       
      if(i==1)
       
          digitalWrite(segmentB,LOW);
          digitalWrite(segmentC,LOW);
          digitalWrite(segmentA,HIGH);
          digitalWrite(segmentD,HIGH);
          digitalWrite(segmentE,HIGH);
          digitalWrite(segmentF,HIGH);
          digitalWrite(segmentG,HIGH);
          digitalWrite(DP,HIGH);
       
 
      delay(2000);
   
    if(i==2)
     
        digitalWrite(segmentA,LOW);
        digitalWrite(segmentB,LOW);
        digitalWrite(segmentD,LOW);
        digitalWrite(segmentE,LOW);
        digitalWrite(segmentG,LOW);
        digitalWrite(segmentF,HIGH);
        digitalWrite(segmentC,HIGH);
        digitalWrite(DP,HIGH);
     
     
      delay(2000);
     
    if(i==3)
     
        digitalWrite(segmentA,LOW);
        digitalWrite(segmentB,LOW);
        digitalWrite(segmentC,LOW);
        digitalWrite(segmentD,LOW);
        digitalWrite(segmentG,LOW);
        digitalWrite(segmentE,HIGH);
        digitalWrite(segmentF,HIGH);
        digitalWrite(DP,HIGH);
     
     
      delay(2000);
     
    if(i==4)
     
        digitalWrite(segmentA,HIGH);
        digitalWrite(segmentB,LOW);
        digitalWrite(segmentC,LOW);
        digitalWrite(segmentG,LOW);
        digitalWrite(segmentF,LOW);
        digitalWrite(segmentE,HIGH);
        digitalWrite(segmentF,HIGH);
        digitalWrite(segmentD,HIGH);
        digitalWrite(DP,HIGH);
     
       
      delay(2000);
     
    if(i==5)
   
      digitalWrite(segmentA,LOW);
      digitalWrite(segmentB,HIGH);
      digitalWrite(segmentC,LOW);
      digitalWrite(segmentD,LOW);
      digitalWrite(segmentE,HIGH);
      digitalWrite(segmentF,LOW);
      digitalWrite(segmentG,LOW);
      digitalWrite(DP,HIGH);
   
   
    delay(2000);
     
    if(i==6)
     
        digitalWrite(segmentA,LOW);
        digitalWrite(segmentB,HIGH);
        digitalWrite(segmentC,LOW);
        digitalWrite(segmentD,LOW);
        digitalWrite(segmentE,LOW);
        digitalWrite(segmentF,LOW);
        digitalWrite(segmentG,LOW);
        digitalWrite(DP,HIGH);
     
   
      delay(2000);
     
     if(i==7)
       
         digitalWrite(segmentA,LOW);
         digitalWrite(segmentB,LOW);
         digitalWrite(segmentC,LOW);
         digitalWrite(segmentD,HIGH);
         digitalWrite(segmentE,HIGH);
         digitalWrite(segmentF,HIGH);
         digitalWrite(segmentG,HIGH);
         digitalWrite(DP,HIGH);
       
       
       delay(2000);
       
     if(i==8)
     
       
         digitalWrite(segmentA,LOW);
         digitalWrite(segmentB,LOW);
         digitalWrite(segmentC,LOW);
         digitalWrite(segmentD,LOW);
         digitalWrite(segmentE,LOW);
         digitalWrite(segmentF,LOW);
         digitalWrite(segmentG,LOW);
         digitalWrite(DP,HIGH);
       
       
      delay(2000);
     
      if(i==9)
       
          digitalWrite(segmentA,LOW);
          digitalWrite(segmentB,LOW);
          digitalWrite(segmentC,LOW);
          digitalWrite(segmentD,LOW);
          digitalWrite(segmentE,HIGH);
          digitalWrite(segmentF,LOW);  
          digitalWrite(segmentG,LOW);
          digitalWrite(DP,HIGH);
         
        delay(2000);
    }
}


Mon problème est que le segment "a" ne s'affiche pas pour les chiffres 2,3,5,6,7,8,9.
Pour le chiffre 4, c'est le segment "f" qui ne s'affiche pas.

Lors du 3 ème passage, le segment "a" s'affiche correctement , tous les chiffres sont complets mais le chiffre 4 affiche un "F" inversé.

Pouvez-vous m'aider à comprendre le problème? Je dois certainement faire une erreur dans mon programme mais j'ai tout retourné, essayé d'autre boucles, utilisé un switch au lieu des if mais j'ai toujours le même soucis.

Merci d'avance pour votre aide.

Bon dimanche,

Marco.

B@tto

Salut,

il manque tout simplement des accolades à tous tes if

Code: [Select]
 
if(i==9) {
         
         digitalWrite(segmentA,LOW);
           digitalWrite(segmentB,LOW);
           digitalWrite(segmentC,LOW);
           digitalWrite(segmentD,LOW);
           digitalWrite(segmentE,HIGH);
           digitalWrite(segmentF,LOW); 
           digitalWrite(segmentG,LOW);
           digitalWrite(DP,HIGH);
           
         delay(2000);

}
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Morolag

Merci beaucoup,c'était bien ça.

Bonne soirée.

Go Up