problème de boucle "for"

bon comme vous allez vite vous en rendre compte je suis plus que novice en arduino mais ma motivation est bien omnie présente .

mais comme vous vous en doutez j’ai un soucis.

j’essaye de créé un simple compteur avec un registre à décalage 74HC595, mais je ne comprend pas pourquoi ma boucle ne se retransmet pas sur mon afficheur 7segment.
si une âme charitable accepterais de bien vouloir m’éclairé, merci d’avance.

voilà mon code:

int verrou = 6;  //broche 12
//Broche connectée sur SH_CP du 74HC595
int horloge = 5; //broche 11
////Broche connectée sur DS of 74HC595
int data =4; // broche 14


void setup() {
  Serial.begin (9600);
  pinMode(verrou, OUTPUT);
  pinMode(horloge, OUTPUT);
  pinMode(data, OUTPUT);
  
}
  void loop (){

 
    
     for ( int i=0;i<10;i++){
       
      afficher_nombre(i);
       
     }
     // attente();

     
      
  }
  
  void afficher_nombre (int nombre){
    
    long temps;
    char unite =0;
    
  
      unite=nombre; 
    

   
   
    afficher (unite);
    
    delay(1000);   
  
    
    
       Serial.print("nombre:");
       Serial.println(nombre);
       
    
       Serial.print("unite:");
       Serial.println(unite);
       

  
  }
  
  void afficher (char chiffre) {
    

    
  if ( chiffre == 0){//0
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x3F);//B00111111
  digitalWrite(verrou, LOW);
  }
  
  if (chiffre == 1) {//1
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x06);//B00000110
  digitalWrite(verrou, LOW);
  }
  
  if (chiffre == 2) {//2
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x5B);//B01011011
  digitalWrite(verrou, LOW);
  }
  if (chiffre ==3 ){//3
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x4F);//B01001111
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 4 ){//4
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x66);//B01100110
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 5 ) {//5
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x6D);//B01101101
  digitalWrite(verrou, LOW);
  }
  if ( chiffre == 6){//6
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x7D);//B01111101
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 7) {//7
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x07);//B00000111
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 8){//8
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x7F);//B01111111
  digitalWrite(verrou, LOW);
  }
  if ( chiffre ==9) {//9
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x6F);//B01101111
  digitalWrite(verrou, LOW);
  }
  } 
 
  
 
  void attente () {
    
    
    long temps = millis();
    
  while ((millis()-temps) < 2000)
  {
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00000001);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00000010);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00000100);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00001000);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00010000);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00100000);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B0100000);  
    digitalWrite(verrou, HIGH);
    
  }
    
  }

PS : void attente est une petite animation que je voulais mettre en place entre 2 incrémentation, elle est juste en suspend le temps de trouvé d’où viens le problème.

Bonjour,
Bienvenue dans le monde Arduino.

  1. tu n’es pas dans la bonne partie du forum.
  2. ton code est illisible, il faut le mettre entre des balises #

[edit] Ton code est déjà plus lisible sous cette forme

int verrou = 6;  //broche 12
//Broche connectée sur SH_CP du 74HC595
int horloge = 5; //broche 11
////Broche connectée sur DS of 74HC595
int data =4; // broche 14

void setup() {
  Serial.begin (9600);
  pinMode(verrou, OUTPUT);
  pinMode(horloge, OUTPUT);
  pinMode(data, OUTPUT);
}

  void loop (){
     for ( int i=0;i<10;i++){
      afficher_nombre(i);
     }
     // attente();
  }
  
  void afficher_nombre (int nombre){
    long temps;
    char unite =0;
      unite=nombre; 
    afficher (unite);
    delay(1000);   
       Serial.print("nombre:");
       Serial.println(nombre);
       Serial.print("unite:");
       Serial.println(unite);
  }
  
  void afficher (char chiffre) {
  if ( chiffre == 0){//0
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x3F);//B00111111
  digitalWrite(verrou, LOW);
  }
  
  if (chiffre == 1) {//1
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x06);//B00000110
  digitalWrite(verrou, LOW);
  }
  
  if (chiffre == 2) {//2
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x5B);//B01011011
  digitalWrite(verrou, LOW);
  }
  if (chiffre ==3 ){//3
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x4F);//B01001111
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 4 ){//4
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x66);//B01100110
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 5 ) {//5
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x6D);//B01101101
  digitalWrite(verrou, LOW);
  }
  if ( chiffre == 6){//6
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x7D);//B01111101
  digitalWrite(verrou, LOW);
  }
  if (chiffre == 7) {//7
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x07);//B00000111
  digitalWrite(verrou, LOW);
  }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  if (chiffre == smiley-cool{//8 Tu vois comme tu as mis ton code ce point ne va pas <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x7F);//B01111111
  digitalWrite(verrou, LOW);
  }
  if ( chiffre ==9) {//9
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x6F);//B01101111
  digitalWrite(verrou, LOW);
  }
  } 
 
  void attente () {
    long temps = millis();
  while ((millis()-temps) < 2000)
  {
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00000001);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00000010);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00000100);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00001000);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00010000);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B00100000);  
    digitalWrite(verrou, HIGH);
    delay(100);
    
    digitalWrite(verrou, LOW);
    shiftOut(data, horloge, MSBFIRST, B0100000);  
    digitalWrite(verrou, HIGH);
  }
  }

désolé je débute sur le forum

tu déplace le topic ou je dois le faire?? et ou doit-il aller?? :/

Re,

G-Ijo:
désolé je débute sur le forum

tu déplace le topic ou je dois le faire?? et ou doit-il aller?? :confused:

Il faut demander au modérateur
@+

C'est fait...

merci .

ducoups qui peu m’aider??

bonjour, déjà ca irait mieux si tu ne mettais pas d'espace entre le nom du void et les () void loop () void attente () void afficher_nombre (int nombre) pour un appel afficher_nombre(i);

je sais pas si ca change quelque chose, mais ca serait déjà mieux. mettre des return aussi

Ce serait bien d'avoir un petit dessin du montage car sur le 595 il n'y a pas que l'horloge et le verrou. Il y a aussi d'autres signaux et il faudrait savoir comment ils sont positionnés

voilà mes branchements les fils jaune représente ceux qui vont au 7 segment j'ai réalisé ça vite fait histoire de me faire comprendre

infobarquée, ça ne change rien, et certains écrivent comme ça ;)

XavierMiller: infobarquée, ça ne change rien, et certains écrivent comme ça ;)

je ne savais pas ;) mais ca a le mérite d'être plus clair pour retrouver des erreurs par la suite, enfin c'est mon avis.

sinon pour le schéma, heuuuuuu, il en manquerait pas des bouts?

Tu ferrais bien de regarder la documentation du 74HC595.

La broche 9 est une sortie elle ne devrait pas aller à la masse.
Le broche 12, c’est l’horloge du registre de sortie. Il faut faire une impulsion positive sur cette horloge après avoir chargé le registre à décalage. C’est elle qui transfère les données vers les sorties.

http://forum.snootlab.com/viewtopic.php?f=38&t=1003

Bonjour,

  if ( chiffre == 0){//0
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x3F);//B00111111
  digitalWrite(verrou, LOW);
  }

La broche «verrou» doit passer d’un état bas à un état haut pour que les données du registre à décalage soient transférées vers les sorties, là dans ton code la broche reste toujours à l’état bas…
Remplace LOW par HIGH dans le deuxième appel à digitalWrite, et ceci pour tous les chiffres dans la fonction afficher().
À noter en revanche que c’est correct dans la fonction attente(), mais comme elle n’est pas appelée parce que mise en commentaire, tu ne t’en rends pas compte :slight_smile:

haifger: Bonjour,

  if ( chiffre == 0){//0
  digitalWrite(verrou, LOW);
  shiftOut(data, horloge, MSBFIRST, 0x3F);//B00111111
  digitalWrite(verrou, LOW);
  }

La broche «verrou» doit passer d'un état bas à un état haut pour que les données du registre à décalage soient transférées vers les sorties, là dans ton code la broche reste toujours à l'état bas... Remplace LOW par HIGH dans le deuxième appel à digitalWrite, et ceci pour tous les chiffres dans la fonction afficher(). À noter en revanche que c'est correct dans la fonction attente(), mais comme elle n'est pas appelée parce que mise en commentaire, tu ne t'en rends pas compte :)

AU P****N !!!!! je vous jure ce n'est pas possible d'être aussi c*n!!! voilà ça marche du feu de dieu. j'en conclu que faire de la prog fatigué assure bien des problème!!!

merci de m'avoir éclairé , même si l'erreur est plus que stupide , mais il parait que c'est comme ça qu'on apprend.

Tu ferrais bien de regarder la documentation du 74HC595.

La broche 9 est une sortie elle ne devrait pas aller à la masse.

la broche N9 est la broche dite de débodement, n'est-elle pas a branché lorsque l'on utilise avec un deuxième 74h595??

Le broche 12, c'est l'horloge du registre de sortie. Il faut faire une impulsion positive sur cette horloge après avoir chargé le registre à décalage. C'est elle qui transfère les données vers les sorties.

la broche 12 est relié à l'arduino, je me suis servis de ce cours pour apprendre à le brancher et m'en servir. le branchement est faux??

http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-en-programmation/presentation-du-74hc595

G-Ijo:

Tu ferrais bien de regarder la documentation du 74HC595.

La broche 9 est une sortie elle ne devrait pas aller à la masse.

la broche N9 est la broche dite de débodement, n'est-elle pas a branché lorsque l'on utilise avec un deuxième 74h595??

La broche 9 propage la sortie du dernier bit du registre à décalage. C'est donc une sortie. Si tu la connectes à la masse, elle se trouve en cour-circuit lorsque le dernier bit et au niveau 1.

G-Ijo:

Le broche 12, c'est l'horloge du registre de sortie. Il faut faire une impulsion positive sur cette horloge après avoir chargé le registre à décalage. C'est elle qui transfère les données vers les sorties.

la broche 12 est relié à l'arduino, je me suis servis de ce cours pour apprendre à le brancher et m'en servir. le branchement est faux??

http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-en-programmation/presentation-du-74hc595

Oui elle est branchée à l'arduino mais il faut la faire bouger pour transférer le contenu du registre à décalage dans l'étage de sortie. C'est la modification de code que haifger t'a dit de faire.

ok je n'avais pas compris pour la broche 12 qu'ils parlaient tous les deux de la même chose !! :cold_sweat: ça explique pourquoi je ne comprenais pas trop sa remarque.

en tous cas merci pour votre aide ça à été d'un grand secours , même si la faute était aussi idiote que le mec qui l'a écrite.