programme Arduino

faire une tempo lorsque bouton relaché

a marqué ce sujet comme résolu.

Bonjour, nouveau dans le monde de l’arduino,j’ai un petit problème concernant la programmation d’une petite séquence: En effet, je veux allumer une led1 et éteindre une led2 tant que j’appuie sur un bouton poussoir( bon ça, j’y arrive…) mais je voudrai que ,lorsque je relache le bouton ,le led1 s’eteigne( ça j’y arrive aussi…) mais aussi que la led2 s’allume pendant un temps donné puis s’éteigne. Et qu’un nouveau cycle recommence uniquement lorsqu’on appuie sur le BP. Est ce que quelqu’un aurai une petite idée? J’ai essayé avec la fonction millis mais cela fait clignoter ma led et ce n’est pas ce que je veux. Merci de votre aide car là je galère …

Bonjour,merci pour cette info,désolé pour le retard.Je pense avoir compris le principe mais en fait , c’est quand pin BP== LOW que je dois faire allumer une led pendant ’X’ secondes puis la faire éteindre.Le soucis c’est que pinBP est toujours LOW sauf quand j’ appuie dessus et donc dans ma boucle , il va toujours l’allumer pendant ’X’secondes puis l’éteindre.Merci de m’éclairer sur ce sujet.:)

bonjour, voici mon code:

const int led2=A5; const int led1 =A4; const int bp=A2; int etatbp=0; void setup() {

1
2
3
pinMode(bp, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);

}

void loop() { etatbp=digitalRead(bp);

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
while ( etatbp==HIGH ){

digitalWrite(led1,HIGH);
}

while ( etatbp==LOW){

digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(2000);
digitalWrite(led2,LOW);
}
}

En fait, je crois comprendre ton probleme. En fait delay(2000) est une fonction bloquante. Ce qui veux dire que ton programme va s’arrêter et ne rien faire pendant 2 secondes et après passer très vite sur le reste du code. Ainsi si ton etatbp n’est pas high en sortie de boucle, ça va revenir dans ton etatbp à low et bloquer pendant 2 secondes.

Tu peux regarder du côté de la fonction millis pour avoir une fonction non bloquante.

Bonsoir :) Avec du code c’est toujours mieux ;)

Si j’ai bien compris ce que tu veux faire , il faut que tu sorte les instructions de la 2ème boucle while:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void loop(){
    etatbp=digitalRead(bp);
    while ( etatbp==HIGH ){
        digitalWrite(led1,HIGH);
    }
    digitalWrite(led1,LOW);
    digitalWrite(led2,HIGH);
    delay(2000);
    digitalWrite(led2,LOW);
    while( etatbp == LOW){ // on attend un appui sur le bouton
       etatbp=digitalread(bp);
    }
}

Voilà :)

PS: quand tu poste du code pense à choisir le langage que tu utilise par exemple " ```arduino " ou le sélectionner quand tu insère du code ;)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte