bonjour à tous
j'ai tenté de réaliser le tuto de cette page pour l'afficheur 7 segments de Eskimon mais mon afficheur n'affiche pas les bons chiffres.
J'ai refait 3 fois le câblage, revérifié les transistor, décodeurs, résistances et tout semble ok.
Mais mauvais affichage sur : 1, 3,4,5,6,7,9.
Le 2, le 8 et le 0 s'affichent correctement.
l'afficheur 7 segments est : 5011BS
le décodeur : CD4543BE
les transistors : 2N2222A
7 résistances de 330 ohms
2 réistances de 2,2k
Je ne sais pas si c'est les composants qui ne sont pas adaptés, le code...
![]()
le programme :
// définition des broches du décodeur 7 segments
// (vous pouvez changer les numéros si vous voulez)
const int bit_A = 2;
const int bit_B = 3;
const int bit_C = 4;
const int bit_D = 5;
// définitions des broches des transistors pour chaque afficheur
const int alim_dizaine = 6; // les dizaines
const int alim_unite = 7; // les unites
void setup()
{
// Les broches sont toutes des sorties
pinMode(bit_A, OUTPUT);
pinMode(bit_B, OUTPUT);
pinMode(bit_C, OUTPUT);
pinMode(bit_D, OUTPUT);
pinMode(alim_dizaine, OUTPUT);
pinMode(alim_unite, OUTPUT);
// Les broches sont toutes mises à l'état bas
digitalWrite(bit_A, LOW);
digitalWrite(bit_B, LOW);
digitalWrite(bit_C, LOW);
digitalWrite(bit_D, LOW);
digitalWrite(alim_dizaine, LOW);
digitalWrite(alim_unite, LOW);
}
void loop() // fonction principale
{
// boucle qui permet de compter de 0 à 99 (= 100 valeurs)
for(char i = 0; i<100; i++)
{
// appel de la fonction affichage avec envoi du nombre à afficher
afficher_nombre(i);
}
}
// fonction permettant d'afficher un nombre sur deux afficheurs
void afficher_nombre(char nombre)
{
long temps; // variable utilisée pour savoir le temps écoulé...
char unite = 0, dizaine = 0; // variable pour chaque afficheur
if(nombre > 9) // si le nombre reçu dépasse 9
{
dizaine = nombre / 10; // on récupère les dizaines
}
unite = nombre - (dizaine*10); // on récupère les unités
temps = millis(); // on récupère le temps courant
// tant qu'on a pas affiché ce chiffre pendant au moins 500 millisecondes
// permet donc de pouvoir lire le nombre affiché
while((millis()-temps) < 500)
{
// on affiche le nombre
// d'abord les dizaines pendant 10 ms
// le transistor de l'afficheur des dizaines est saturé,
// donc l'afficheur est allumé
digitalWrite(alim_dizaine, HIGH);
// on appel la fonction qui permet d'afficher le chiffre dizaine
afficher(dizaine);
// l'autre transistor est bloqué et l'afficheur éteint
digitalWrite(alim_unite, LOW);
delay(10);
// puis les unités pendant 10 ms
// on éteint le transistor allumé
digitalWrite(alim_dizaine, LOW);
// on appel la fonction qui permet d'afficher le chiffre unité
afficher(unite);
// et on allume l'autre
digitalWrite(alim_unite, HIGH);
delay(10);
}
}
// fonction écrivant sur un seul afficheur
// on utilise le même principe que vu plus haut
void afficher(char chiffre)
{
digitalWrite(bit_A, LOW);
digitalWrite(bit_B, LOW);
digitalWrite(bit_C, LOW);
digitalWrite(bit_D, LOW);
if(chiffre >= 8)
{
digitalWrite(bit_D, HIGH);
chiffre = chiffre - 8;
}
if(chiffre >= 4)
{
digitalWrite(bit_C, HIGH);
chiffre = chiffre - 4;
}
if(chiffre >= 2)
{
digitalWrite(bit_B, HIGH);
chiffre = chiffre - 2;
}
if(chiffre >= 1)
{
digitalWrite(bit_A, HIGH);
chiffre = chiffre - 1;
}
}
