Sylvain Mahé Le site Web Retour à l'accueil Principes Partager mes idées et mes projets librement et gratuitement. Thématiques Mécatronique du système embarqué, artisanat pluridisciplinaire, bricolage commun, esthétique logicielle et matérielle, minimalisme fonctionnel, conceptualisation alternative, rédaction technique et littéraire, partage pédagogique documenté. Contact ✆ Téléphone : 06.45.49.96.98
✉ E-mail : contact@sylvainmahe.site
✎ Site Web : sylvainmahe.site
Écriture de la page : Sylvain Mahé
Les interruptions avec la classe InterruptRead Les interruptions permettent d'interrompre le déroulement normal d'un programme afin d'effectuer une tâche à un moment précis, puis de continuer l'exécution du programme là où il s'était arrêté. La classe InterruptRead permet de détecter un front montant et/ou descendant (passage de 0V à +5V ou inversement) sur les broches du microcontrôleur concernées par les interruptions. Ports des automates programmables concernés par les interruptions : Automate programmable MODULABLE 20 :
- Port GPIO 3 (PD2) = INT0 (interrupt 0)
- Port GPIO 4 (PD3) = INT1 (interrupt 1)

Automate programmable MODULABLE 32 :
- Port GPIO 3 (PB2) = INT2 (interrupt 2)
- Port GPIO 11 (PD2) = INT0 (interrupt 0)
- Port GPIO 12 (PD3) = INT1 (interrupt 1)
L'utilité d'un tel système est de pouvoir déceler un changement d'état d'un port du microcontrôleur au moment même où il se produit. Il n'est alors plus nécessaire d'attendre une lecture de l'état du port concerné au sein même d'une boucle de vérification, comme c'est le cas avec la classe GpioRead (cette dernière solution produisant une latence suivant la vitesse d'exécution totale de votre boucle de calcul). Grâce aux interruptions de programme, il vous est par exemple possible de quantifier en nombre et mesurer la périodicité d'un phénomène physique externe qui changerait spontanément d'état (dans les limites techniques imposées par le logiciel et le matériel bien entendu). Exemple d'utilisation de la classe InterruptRead : #include <InterruptRead.h> void myEvent() { //un front montant a été détecté } int main() { InterruptRead myInterrupt = InterruptRead (3); myInterrupt.start (myEvent, true, false); while (true) { } return 0; } Dans cet exemple, un objet myInterrupt de type InterruptRead est déclaré, en paramètre est indiqué d'utiliser le port GPIO numéro 3 de l'automate programmable en entrée, puis afin de démarrer la lecture du port concerné, cet objet myInterrupt appelle la fonction start prenant plusieurs paramètres :
- Le 1er paramètre myEvent est le nom de la fonction déclarée en amont qui va servir à exécuter du code quand l'interruption interviendra.
- Le 2ème paramètre true permet de détecter les fronts montants sur le port GPIO.
- Le 3ème paramètre false indique de ne pas détecter les fronts descendants sur le port GPIO.
Même si vous n'avez pas besoin d'exécuter des instructions dans la boucle while, cette dernière reste importante car elle permet au microcontrôleur de continuer l'exécution du code (soit l'écoute des interruptions). Dans le cas contraire, l'exécution terminerait après return 0;, et le microcontrôleur s'arrêterait là de sorte que plus aucune interruption ne pourrait être exécutée ! Autre fonction disponible : Cette classe dispose également d'une fonction stop qui permet de stopper la lecture des fronts montants et/ou descendants sur le port GPIO concerné. De nombreuses applications et montages sont possibles avec les interruptions de programme, pour ne citer qu'un exemple, c'est avec ce principe que je détecte la fermeture du tube sur mon compteur Geiger, ce qui permet ensuite d'extrapoler facilement et d'estimer la radioactivité en rapport au temps écoulé entre deux interruptions... Références : Récapitulatif des fonctions de cette classe : InterruptRead (const unsigned char PIN); void start (void functionJump(), const bool RISING, const bool FALLING); void stop();