Bonsoir,
sur Arduino j'ai une boucle avec des delay et j'aurais aimé savoir si il existait un moyen de sortir de cette boucle (par exemple changement de position d'un bouton) pendant un delay ?
en vous remerciant,
Alex

Arduibo : sortir d'une boucle pendant un delay
Débuté par alexso, sept. 04 2013 09:13
6 réponses à ce sujet
#1
Posté 04 septembre 2013 - 09:13
#2
Posté 04 septembre 2013 - 10:58
La documentation sur la fonction delay() précise que :
"the delay function does not disable interrupts."
(Source : http://arduino.cc/en/Reference/Delay)
Donc, on peut mettre en place une interruption avant la boucle par un AttachInterrupt() (voir http://arduino.cc/en/Reference/AttachInterrupt ).
Puis, quand un bouton (relié uniquement à certains ports, selon le modèle de la carte) sera pressé, alors la routine de l'interruption sera exécutée. Ensuite quand cette routine sera terminée, la boucle reprendra. Si une variable globale a été changée dans la routine de l'interruption, alors s'il y a un test de cette variable dans la boucle, le programme pourra sortir éventuellement de la boucle.
"the delay function does not disable interrupts."
(Source : http://arduino.cc/en/Reference/Delay)
Donc, on peut mettre en place une interruption avant la boucle par un AttachInterrupt() (voir http://arduino.cc/en/Reference/AttachInterrupt ).
Puis, quand un bouton (relié uniquement à certains ports, selon le modèle de la carte) sera pressé, alors la routine de l'interruption sera exécutée. Ensuite quand cette routine sera terminée, la boucle reprendra. Si une variable globale a été changée dans la routine de l'interruption, alors s'il y a un test de cette variable dans la boucle, le programme pourra sortir éventuellement de la boucle.
#3
Posté 05 septembre 2013 - 10:28
Dans la mesure du possible, éviter de programmer des delay()
Ce sont des fonctions bloquantes, Arduino attend et ne fait rien pendant ce temps.
Le temps peut être géré plus efficacement par millis()
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ExempleBlinkWithoutDelay
Ca permet de disposer des interruptions en permanence
Ce sont des fonctions bloquantes, Arduino attend et ne fait rien pendant ce temps.
Le temps peut être géré plus efficacement par millis()
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ExempleBlinkWithoutDelay
Ca permet de disposer des interruptions en permanence
Christian
#4
Posté 05 septembre 2013 - 01:55
merci pour ta réponse j'y jette un oeil
#5
Posté 05 septembre 2013 - 02:05
c'est parfait
dernière chose y a t il un moyen de sortir d'une boucle suite à l'action sur un bouton, sans tester la condition de l'état du bouton en permanence ?
dernière chose y a t il un moyen de sortir d'une boucle suite à l'action sur un bouton, sans tester la condition de l'état du bouton en permanence ?
#6
Posté 05 septembre 2013 - 04:32
La surveillance "invisible" en arrière plan du bouton est réalisée par les interruptions
http://arduino.cc/fr/Main/AttachInterrupt
Par contre pendant un delay il ne se passe strictement rien, on fait la pause café
http://arduino.cc/fr/Main/AttachInterrupt
Par contre pendant un delay il ne se passe strictement rien, on fait la pause café
Christian
#7
Posté 05 septembre 2013 - 04:45
écoute c'est juste parfait,
merci infiniment
Alex
merci infiniment
Alex
1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users