Faire clignoter une LED sans delay()

Pour comprendre

L'inconvénient de la fonction delay() pour temporiser un programme est son caractère bloquant : on ne peut rien faire d'autre pendant la pause.

Ici, on montre comment faire la même chose en utilisant la fonction millis() et 2 variables : l'état de la LED est modifié seulement lorsque le délai voulu est écoulé et le reste du temps, le programme peut faire autre chose.

Le montage :

Connecter une LED via une résistance de 270 Ohms sur la broche 0 (=X1) de la pyboard :

Le code

# faire clignoter une LED sans delay()

from upyduino import *

LED=0
millis0=0 # variable pour mémoriser millis
interval=1000 # intervalle voulu en ms

def setup():
    pinMode(LED, OUTPUT)

def loop():

    global millis0

    if millis()-millis0 > interval :
        millis0=millis() # RAS millis0
        toggle(LED)
        if digitalRead(LED)==HIGH : print('LED ON')
        else: print('LED OFF')

    # placer ici le reste du code
    # noter que le principe peut être étendu en utilisant plusieurs variables millis0 et interval distinctes
    # attention : millis() RAZ au bout de quelques jours

# exécution 
setup()
while True:loop()