Bug code multiples Afficheurs 7 segments

Bonjour, je souhaite faire un compteur contrôlable avec 3 boutons un qui allume un qui ajoute et un qui enlève et j'utilise 5 afficheurs 7 segments. Je fais donc une simulation sur Tinkercad et ca ne marche pas: les 1er et 2eme chiffres se mélangent.

PS:Le multimètre devrait afficher -5v.

// C++ code
//

int A = 2;
int B = 3;
int C = 4;
int D = 5; 
int E = 6;
int F = 7;
int G = 8;
bool on = false;
int valon = 0;
int valplus = 0;
int val = 0;

void turnon()
{
  
}
  
void C1()
{
 digitalWrite(9,LOW);
  digitalWrite(10,HIGH);
  digitalWrite(11,HIGH);
  digitalWrite(12,HIGH);
  digitalWrite(13,HIGH); 
}

void C2()
{
  digitalWrite(9,HIGH);
  digitalWrite(10,LOW);
  digitalWrite(11,HIGH);
  digitalWrite(12,HIGH);
  digitalWrite(13,HIGH);
}

void C3()
{
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(11,LOW);
  digitalWrite(12,HIGH);
  digitalWrite(13,HIGH);
}

void C4()
{
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(11,HIGH);
  digitalWrite(12,LOW);
  digitalWrite(13,HIGH);
}

void C5()
{
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(11,HIGH);
  digitalWrite(12,HIGH);
  digitalWrite(13,LOW);
}

void one()
{
  digitalWrite(A,LOW);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
}

void two()
{
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,LOW);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,LOW);
  digitalWrite(G,HIGH);
}

void setup()
{
  pinMode(A,OUTPUT);
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT);
  pinMode(E,OUTPUT);
  pinMode(F,OUTPUT);
  pinMode(G,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  pinMode(A1,INPUT);
  pinMode(A0,INPUT);
  pinMode(A3,INPUT);  
  
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(11,HIGH);
  digitalWrite(12,HIGH);
  digitalWrite(13,HIGH);
  
  Serial.begin(9600);

}

void loop()
{  
    C1();
    one();
    delay(50);
  
    C2();
    two();
    delay(50);  
}

commencez par faire marcher 1 afficheur

le plat de nouille pour le câblage est illisible, donc il se peut que vous ayez des fils qui ne soient pas au bon endroit

Bonjour tilow

Quels sont les effets de ce mélange?

Pourrais-tu mettre ta simulation publique pour que l'on puisse voire ça de près?

Cordialement
jpbbricole

Déjà, ici il y a un problème

Les INPUT devraient être remplacés par des INPUT_PULLUP

C'est la succession des fonctions dans cet ordre qui créé le mélange des chiffres, on parle généralement de "chiffres fantômes".
Lorsque tu appelles C2() pour activer le second digit, les sorties des segments contiennent toujours l'états fixé par one().
De même, lorsque tu appelles C1()pour activer le premier digit, les sorties des segments contiennent toujours l'états fixé par two().
Il faudrait passer par un état intermédiaire qui inactiverait les sorties avant de sélectionner le digit suivant.

    C1();
    one();
    delay(50);
    rien();
    C2();
    two();
    delay(50);  
    rien();

avec

void rien()
{
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
}

A noter, digitalWrite() n'est pas très optimisée. Cette fonction est lente et tu vas sans doute rencontrer des problèmes de papillotement de ton affichage lorsque tu allumeras tous les chiffres. il faudrait regarder du coté de la librairie digitalWriteFast qui permet d'avoir un accès plus rapides aux I/Os.

Oui, mais il faut mettre les inters entre les entrées et GND, et inverser alors le code... Dessiné comme il sont ce serait des pull-down qu'il faudrait.

Les "schémas" Fritzing sont illisibles et je n'avais pas fait attention juste vu qu'il n'y avait pas de résistances sur les entrées.

C'est vrai, et on ne voit pas non plus qu'avec des résistances de 100Ω cela devrait faire 50 mA par segment et 350mA dans les sorties correspondantes aux chiffres.
On conseille de ne pas dépasser 20mA, mais fritzing ne le vérifie pas.

si j'active un seul afficheur cela fonctionne je pense que le problème vient de mon code.
Merci quand même.

Comme on le voit sur la photo ce mélange fait que une partie du 2 apparait sur le 1 et inversement

Et voici la simulation:

Merci.

Super, votre code fonctionne !

Merci beaucoup!

Ducoup je mets quoi aux Input Analog?

ou

Si tu laisses les poussoirs câblés tel qu'ils le sont actuellement avec le commun au +5V, il faut ajouter des pull down externes.
Si tu raccordes le commun des poussoirs à GND, tu peux alors utiliser INPUT_PULLUP et il n'y a aucun composant à ajouter.