arduino : problème d'affichage de certains chiffres avec shiftregisters et afficheurs 7 segments.

a marqué ce sujet comme résolu.

Bonsoir,

Progressant dans ma découverte d’Arduino, j’en suis à travailler sur les afficheurs 7 segments et les registres à décalage. Je rencontre un problème en tentant de faire compter deux afficheurs (chacun associé à un registre) de 0 à F : tout s’affiche correctement, sauf les chiffres 1 et 7 qui n’affichent que les segments A et F (au lieu de B et C pour l’un, A, B et C pour l’autre). Voici mon code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const int verrou = 11;
const int donnee = 10;
const int horloge = 12;

const int hexa[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
int chiffre;

void setup()
{
    pinMode(verrou, OUTPUT);
    pinMode(donnee, OUTPUT);
    pinMode(horloge, OUTPUT);     
}

void loop()
{   
    for(int i=0; i<17; i++)
    {
        chiffre = hexa[i];  
        while(chiffre <17)
        {
            chiffre ++;
        }
        digitalWrite(verrou, LOW);
        shiftOut(donnee, horloge, LSBFIRST, chiffre);
        shiftOut(donnee, horloge, LSBFIRST, chiffre);
        digitalWrite(verrou, HIGH); 
        delay(500);
    }
}

Les afficheurs sont à cathode commune. Les segments A à G sont branchés sur les pins 1 à 8 des registres. Ainsi pour afficher 1, je dois mettre à 1 les segments B et C et donc envoyer aux registres le chiffre 6 en binaire, soit B00000110 (0x06 en hexadécimal). Même démarche pour le 7.

J’ai essayé plusieurs choses, parmi lesquelles inscrire dans mon tableau const int hexa les valeurs binaires et décimales plutôt qu’hexadécimales, sans succès. Idem en modifiant ma const int hexa en const byte hexa ou en const char hexa. Il semble par ailleurs que le bug se produise avec tout chiffre inférieur à 10.

Par contre, si je rentre ces chiffres directement dans le code pour les afficher individuellement pas de problème. Ainsi cette modif fonctionne :

1
2
shiftOut(donnee, horloge, LSBFIRST, 0x06);
shiftOut(donnee, horloge, LSBFIRST, 0x07);

Est-ce que j’oublie quelque chose ? Merci pour votre aide.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte