Appui sur BP allume LED une durée voulue (minuteur) sans delay
Pour comprendre
Nous avons vu précédemment comment réaliser un minuteur par appui sur le bouton poussoir : par contre la solution utilisée est bloquante car utilise une instruction delay().
Ici, une alternative non bloquante basée sur la fonction millis()
Le montage :
Connecter :
- une LED via une résistance de 270 Ohms sur la broche 0 (=X1) de la pyboard
- un bouton poussoir entre la broche 1 (=X2) de la pyboard et le 0V
Le code
Le point important ici est de réaliser le rappel au PLUS de la broche sur laquelle est connecté le bouton poussoir. La LED s'allume une certaine durée lors d'un appui sur le bouton poussoir (effet minuteur)
! Remarquer l'utilisation très pratique de digitalRead() sur la LED : cela permet de se passer d'une variable d'état supplémentaire, la LED étant elle-même la variable d'état.
from upyduino import *
LED=0 # broche LED
BP=1 # broche BP
appui=LOW # état BP appuyé
millis0=0 # mémorise dernier 0 survenu
delayOn=5 # durée en seconde
def setup():
pinMode(BP, INPUT_PULLUP) # broche en entrée
pinMode(LED, OUTPUT) # broche en sortie
def loop():
global millis0
if digitalRead(BP)==appui: # si appui - ICI SERA ACTIF MEME SI DELAI EN COURS !
millis0=millis() # RAZ millis0
print("Appui BP") # atteste appui
if digitalRead(LED)==LOW: digitalWrite(LED, HIGH) # allume la LED si éteinte
delay(500) # entre 2 appuis
if millis()-millis0>(delayOn*1000) and digitalRead(LED)==HIGH : # si le délai est écoulé et LED allumée
millis0=millis() # RAZ millis0
digitalWrite(LED, LOW) # éteint la LED
# exécution
setup()
while True:loop()