Mon programe ne repart pas quand je rappuies sur mon bouton poussoir

bonjour , voila j'ai un programme avec un while ,il compte 5 fois et reste allumé si je reste appuyé sur le bouton poussoir et si je relâche il s'éteint , or si je réappuie sur le bouton poussoir le programme ne recommence pas a clignoter aucune led s'allume

pouvez vous me mettre sur la piste s'il vous plait ?

Voici le code ::


int i=0;
int led=13;
int bouton = 2;
int etatbouton=0;
void setup() {
 
  pinMode(bouton, INPUT); 
  pinMode(13, OUTPUT);
}


void loop() {
  etatbouton = digitalRead (bouton);
{
  if 
    (digitalRead(bouton) == HIGH)
  while(i<5){
  i++;
      
    
    
    
  digitalWrite(led, LOW);   
  delay(200);                       
  digitalWrite(led, HIGH);    
  delay(200);
    
  
  }
    
  else 
  {
  digitalWrite(led,LOW);
   
    
   
  
   }
   
  
  
         
}
} 


Merci d’éditer votre post pour rajouter les balises de code

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l’icône </> dans la barre d’outils pour indiquer que c’est du code

(Assurez vous aussi d’indenter le code correctement dans l’IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

:warning: lire les recommandations listées dans « Les bonnes pratiques du Forum Francophone”


Combien vaut i la seconde fois ? (Et pourquoi mettre le pinMode dans la loop ?)

Dans la loop ? Ca ne teste pas le bouton, ça le déclare, c'est tout.

Edit : oups, @J-M-L l'a déjà pointé...

je vois pas pourquoi le programme ne redémarre pas quand le bouton est au repos parce qu'a mon niveau je pense avoir réussi à sortir de while vue que les leds s'éteint ! quand je relâche le bouton je n'ai pas une connaissance poussé

Deuxième et dernière notification. Éditez votre premier post et rajoutez les balises de code SVP. Merci


Répondez à cette question

( i ) vaudra toujours 5 à chaque fois que je r ‘appuie
Sur le bouton poussoir :blush:

Donc il faut le remettre à 0 si tu veux pouvoir utiliser l e bouton plus d'une fois.
De plus, tu affectes l'état du bouton à ta variable etatbouton mais tu ne t'en sers pas.

Tu peux faire :
if (etatbouton == HIGH)

et déclarer etatbouton comme un booléen (avant le setup)
bool etatbouton = LOW;

A priori ton bouton est câble en pull-down :
L1: Using buttons - Physical Computing

De même tu définis :
int led=13;
mais tu ne t'en sers pas ensuite. Fais plutôt :
pinMode(led, OUTPUT);

Bravo :wink:

bonsoir oui mon bouton est en pull down

j'ai interprété vos solutions :laughing: mais ça ne s'allumais plus apres les changements

  int i=0;
  int led=13;
  int bouton = 2;
  bool etatbouton =HIGH;
void setup() 
{
  pinMode(bouton, INPUT); 
  pinMode(led, OUTPUT);
}


void loop() 
 
{
  if 
    (etatbouton == HIGH)
  if 
  (digitalRead(bouton) == HIGH)
  while(i<5){
  i++;
  digitalWrite(led, LOW);   
  delay(200);                       
  digitalWrite(led, HIGH);    
  delay(200);
  }
  else 
  {
  digitalWrite(led,LOW);
  }
  }



du coup j'ai changé certain ligne de code mais j'arrive toujours pas à relancer le code

Bonjour,

@J-M-L t'a mis sur la voie au post #2, @lesept t'a donné la solution au post #8. Il faut mettre i à 0 avant le while (ne pas oublier les {} après le if).

Remarques:

  • le
    if
    (etatbouton == HIGH)
    ne sert à rien puisque etatbouton est toujours HIGH
  • le while serait avantageusement remplacé par un for
  • indente ton code comme @J-M-L te l'a préconisé au post #2, tel quel on ne voit pas la structure.

non résolu tempi ! vous pouvez fermer le post ,

La solution est écrite plusieurs fois dans les posts du fil de discussion

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.