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.