Interruptions
Une possibilité très intéressante fournie par Micropython sur la carte Pi Pico est la possibilité d'utiliser une interruption pour détecter une modification d'une broche. Voici un code d'exemple :
from machine import Pin
bp = Pin(17, Pin.IN, Pin.PULL_UP) # broche en entree pullup actif
bp.irq(
lambda pin: print("IRQ with flags:", pin.irq().flags()), # fonction inline
Pin.IRQ_FALLING # mode de déclenchement
)
Note
Remarquer :
-
que le code est particulièrement "propre", concis : il n'est plus nécessaire de lire la broche à intervalle régulier, son changement d'état étant intercepté au niveau matériel.
-
comment il est possible "d'éclater" sur plusieurs lignes les paramètres d'une fonction contenus entre parenthèses, d'y placer des commentaires. Cela fait penser par exemple à ce qui est possible en Javascript par exemple. Donc, bien que Python soit sensible à l'indentation, il est plutôt tolérant lorsque l'on est au sein de parenthèses.
-
la façon d'utiliser une fonction "inline" avec le mot-clé
lambda
Quelques explications :
-
la définition de l'interruption passe par l'appel de la fonction irq() de la broche que l'on configure. Cette fonction reçoit :
- la fonction de gestion de l'interruption
- l'évènement déclencheur, définit à l'aide des propriétés
IRQ_FALLING
(déclenchement sur front descendant) ouIRQ_RISING
(déclenchement sur front montant)
-
la fonction lambda inline reçoit l'objet déclencheur de l'interruption, à savoir ici le bp, que l'on appelle pin : cet objet représente la broche déclencheuse.
-
on connaît le statut de l'interruption de déclenchement grâce à la fonction flags de la fonction irq de l'objet pin d'où la forme
pin.irq().flags()