Bonjour tout le monde.
Je suis nouveau sur le forum et débutant dans le code.
Je travaille actuellement sur un projet qui permettra entre autre de déclencher un son quand on appuie sur un bouton et qui fera en même temps clignoter un LED pendant toute la durée de diffusion du son (qui dure 10 secondes).
Mon premier objectif est de réussir à faire clignoter la LED pendant une durée définie de 10 secondes après avoir appuyé puis relâché le bouton poussoir. En résumé voici ce que je souhaite faire:
1-j'appuis sur le bouton et je le relâche immédiatement
2-cela déclenche le clignotement de la LED pendant 10 secondes
3-au bout de 10 secondes, la LED devient éteinte
4-si j'appuie de nouveau sur le bouton, la séquence de clignotement recommence etc...
J'y arrive avec la fonction delay en jouant avec un compteur. Mais cela n'est pas très "pro" car le compteur n'est pas en mesure de temps mais en nombre de fois d'exécution de boucle. En tâtonnant j'arrive à avoir à peu près 10 secondes en faisant boucler 5 fois.
//CODE Bouton+LED Blink pendant 5 secondes avec DELAY
int led = 4; //led branchée en pin 4
int bouton = A3; //bouton branché en pin A3
void setup() {
pinMode(led, OUTPUT); //broche de la LED configurée en sortie
pinMode(bouton, INPUT_PULLUP); //broche du bouton configurée en entrée avec activation résistance pullup
}
void loop() {
if (digitalRead(bouton) == LOW) { //si le bouton est appuyé,
for (int count = 0; count < 5; count++) { // répète 5 fois le clignotement de la LED
digitalWrite(led, HIGH); //allume la LED
delay(1000); //pause de 1 seconde
digitalWrite(led, LOW); //éteint la LED
delay(1000); //pause de 1 seconde
}
}
}
Mais je souhaite utiliser la fonction millis() en remplacement de la fonction delay() pour éviter de bloquer le code et c'est là que ça se complique.
J'ai l'impression de tout mélanger et je ne sais pas comment gérer les conditions entre elles, à quel moment lire l'état du bouton, comment assembler tout ça...
J'ai fait un essai dans le code ci après mais rien ne marche malheureusement... et je ne omprends pas pourquoi...
Auriez-vous des pistes à me proposer? Faut-il utiliser millis(), existe t'il un moyen plus simple? La boucle FOR est elle adaptée?
Merci d'avance pour votre aide.
//CODE non fonctionnel Bouton+LED Blink pendant 5 secondes avec MILLIS
int led = 4; //led branchée en pin 4
int bouton = A3; //bouton branché en pin A3
int etat_bouton; //lecture de l'état des boutons
int etat_led; //stockage de l'état de la led
long temps; // stockage de la mesure du temps
void setup() {
pinMode(led, OUTPUT); //broche de la LED configurée en sortie
pinMode(bouton, INPUT_PULLUP); //broche du bouton configurée en entrée avec activation résistance pullup
etat_led = LOW;//état de la LED au départ
}
void loop() {
if (digitalRead(bouton) == LOW) { //si le bouton est appuyé,
temps = millis(); //initialisation du temps
for (int count = 0; count < 5; count++) { // répète 5 fois le clignotement de la LED
if((millis() - temps) > 1000)
{
etat_led = !etat_led; // on inverse l'état de la LED
digitalWrite(led, etat_led); // on allume ou éteint
temps = millis(); // on stocke la nouvelle heure
}
}
}
}