Une interruption, comme son nom l’indique, consiste à interrompre momentanément le programme principal exécuté pour effectuer un autre travail. Quand cet autre travail est terminé, on retourne à l’exécution du programme principal à l’endroit exact où il l’avait été laissé.Cet autre travail s’appelle le programme d’interruption.


Il est très important que le programme d’interruption ait un temps d’exécution le plus court possible. On ne fera donc aucun calcul compliqué et aucun appel à des fonctions longues.


Il existe plusieurs sources d’interruption :

    • les interruptions matérielles : par exemple, une interruption liée au changement de la tension présente sur une broche numérique (appelée aussi interruption externe) ;
    • les interruptions logicielles  qui sont déclenchées par des instructions spéciales du processeur.


Exemple : Avec l'interruption matérielle, il est inutile de surveiller en permanence l'état d'une broche d'entrée sur laquelle vous avez raccordé un bouton poussoir. Lorsqu’un changement d'état est détecté, le programme d'interruption est exécutée. 


Pour le Raspberry Pi Pico, toutes les broches du GPIO peuvent être utilisées en interruption.



 On peut choisir le mode de détection de l’interruption :

    • LOW : Déclenche l’interruption dès que le signal est à 0V
    • HIGH : Déclenche l’interruption dès que le signal est à 3.3V
    • RISING : Déclenche l’interruption sur front montant
    • FALLING : Déclenche l’interruption sur front descendant
    • CHANGE : Déclenche l’interruption dès que le signal change d'état de 0->-3.3V ou de 3.3V --> 0V




Exemple 1 de programme d'interruption avec le Raspberry Pi Pico et MicroPython


A chaque action sur le bouton poussoir (front montant), la LED change d'état même si le programme principal est occupé à une autre tâche.



Raspberry Pi Pico MicroPython interruption externe broche

Programme avec interruption sur front montant de la broche GP18

Cette version est à éviter car la fonction interruption est beaucoup trop longue.


from machine import Pin
from time import *

led1_pin = Pin(20, Pin.OUT)   # broche GP20 en sortie (repère D20 shield Grove)
bp1_pin = Pin(18, Pin.IN)     # broche GP18 en entrée (repère D18 shield Grove)

# Le programme d'interruption
def fct_interruption(pin):
    print("Appui sur BP detecté")
    if led1_pin.value()==1:
        led1_pin.value(0)
    else:
        led1_pin.value(1)

# Spécifie la fonction à appeler lorsqu'une interruption externe survient
bp1_pin.irq(trigger = Pin.IRQ_RISING, handler = fct_interruption)

# Le programme principal
while True:
    sleep(5)


bp.irq(trigger=Pin.IRQ_RISING, handler = fct_interruption)

Spécifie la fonction à appeler lorsqu'une interruption externe survient.  La fonction fct_interruption   serra appelée chaque fois qu'un front montant est détecté sur le bouton poussoir bp (GPIO26)



Exemple 2 de programme d'interruption avec le Raspberry Pi Pico et MicroPython


Fonctionnement identique à l'exemple 1 mais avec un temps d’exécution le plus court possible dans la fonction fct_interruption


Raspberry Pi Pico MicroPython interruption externe broche

Programme avec interruption sur front montant de la broche GP18


from machine import Pin

impulsion = False
etat_led = False

led1_pin = Pin(20, Pin.OUT)   # broche GP20 en sortie (repère D20 shield Grove)
bp1_pin = Pin(18, Pin.IN)     # broche GP18 en entrée (repère D18 shield Grove)

# Le programme d'interruption 
def fct_interruption(pin):
    global impulsion
    impulsion = True

# Spécifie la fonction à appeler lorsqu'une interruption externe survient 
bp1_pin.irq(trigger = Pin.IRQ_RISING, handler = fct_interruption)

# Le programme principal 
while True:
    if impulsion:
        print("Appui sur BP detecte")
        if led1_pin.value()==1:
            led1_pin.value(0)
        else:
            led1_pin.value(1)
        impulsion = False


impulsion = True

La variable impulsion de type booléen passe à True quand on lance le programme d'interruption (fonction fct_interruption ) et repasse à False quand il est terminé.

Cette variable est utilisée dans le programme principal pour allumer ou éteindre la Led, afficher du texte sur la console. 

Cela permet d'avoir un temps d’exécution le plus court possible dans la fonction fct_interruption































Créé avec HelpNDoc Personal Edition: Générateur de documentation d'aide HTML gratuit