Bonsoir a tous !
Afin de réviser un peu le C++ sous Arduino, que j'ai vu en cours de SI pendant l'année, j'ai décidé de refaire les tous premiers TP tout simple que nous avions fait.
Le but de ce TP est de faire clignoter une DEL via un bouton poussoir. Lorsque l'on maintient appuyer, la DEL reste allumée ou clignote ( en fonction du programme ) et dès que l'on relache, elle s'arrete.
En cours, nous avions utilisé la boucle " if " .... " else "...
Le TP fonctionne parfaitement comme cela, mais j'ai voulu essayer avec la boucle " while ". J'ai téléversé mon programme, la DEL est éteinte, comme avec l'autre boucle, j'appuie sur le bouton poussoir, la DEL s'allume, je relache le bouton boussoir, elle reste allumée !
Je ne comprends pas pourquoi elle ne s'éteint pas...
Est-ce tout simplement, parce que l'usage de cette boucle n'est pas appropriée pour ce TP, ou mon code qui est mauvais ?
Le voici :
int DEL=2;
int BP=8;
boolean EtatBP=0;
void setup()
{
pinMode(DEL,OUTPUT);
pinMode(BP,INPUT);
}
void loop()
{
EtatBP=digitalRead(BP);
while (EtatBP==HIGH)
{
digitalWrite(DEL,HIGH);
delay(100);
digitalWrite(DEL,LOW);
delay(100);
}
digitalWrite(DEL,LOW);
}
Je vous remercie pour votre aide, et j'espère avoir respecté correctement, les règles de ce forum, étant nouveau, pardonnez moi si jamais j'ai commis une erreur.
bonjour,
il est ou le while dans le code?
en plus pourquoi utiliser des boolean avec ce code?
t'as du rater pas mal de cours
utilises les exemples de l'ide pour comprendre
Rooohh quel boulet alors...
Effectivement, je me suis trompé de code, et en plus c'est un code bourré d'erreurs...
Voici le bon code :
int DEL=2;
int BP=8;
boolean EtatBP=0;
void setup()
{
pinMode(DEL,OUTPUT);
pinMode(BP,INPUT);
}
void loop()
{
EtatBP=digitalRead(BP);
while (EtatBP==HIGH)
{
digitalWrite(DEL,HIGH);
delay(100);
digitalWrite(DEL,LOW);
delay(100);
}
digitalWrite(DEL,LOW);
}
Du coup, une fois que j'ai appuyé sur le bouton poussoir la DEL clignote tout le temps, alors que je relache le boutpn poussoir, elle est devrait s'arreter...
En fait c'est parce qu'une fois que tu rentres dans ta boucle tu relis jamais la valeur du bouton poussoir il vaut donc toujours "HIGH" peu importe ce que tu fais hardware...
Rajoute ça dans ta boucle ou tu veux ça change rien :
EtatBP=digitalRead(BP);
edit : mais, "if .. else" est mieux dans cette situation : le loop faisant office de boucle
edit : si ta variable EtatBP vaut HIGH tu vas rentrer dans la boucle, et la valeur de EtatBP ne change jamais dans ton while. Il faut donc la relire dans le while pour vérifier que tu appuies toujours dessus
Et oui, effectivement, je reste tout le temps dans ma boucle, je n'en sort jamais et je ne vérifie pas l'état de BP en fin de boucle..
Merci beaucoup, cela fonctionne très bien.
Je vais faire de meme avec un répéter tant que.
Cela m'entraine a utiliser d'autres boucles
Un grand merci en tout cas pour cette réponse rapide et efficace XD