Exercice : Utilisation des interruptions

Cahier des charges

On se propose de réaliser un programme très simple pour piloter le schéma ci-contre : à chaque action sur le bouton poussoir, l'état de la diode change. Cependant, la fonction loop() sera vide !

Gestion d'un bouton poussoir en mode interruptif.Informations[1]

Principe de gestion des interruptions sur Arduino

Deux fonctions permettent d'initialiser les interruptions :

  • attachInterrupt() : fixe le numéro de l'interruption, la fonction à appeler en cas d'interruption et le mode de fonctionnement de l'interruption (sur état, sur front ou sur changement d'état)

  • detachInterrupt() : désactive une source d'interruption

Deux fonctions permettent d'inhiber/désinhiber les interruptions :

Question

Réalisez un programme permettant de répondre au cahier des charges (avec void loop() {})

Solution

1
#define PORT_LED 4
2
#define PORT_BOUTON 3 //On utilise obligatoire le port 2 ou 3 pour les interruptions
3
bool etatLed=LOW;//Stocke l'état de la LED
4
5
void setup(){
6
  Serial.begin(9600);
7
  pinMode(PORT_LED, OUTPUT);
8
  pinMode(PORT_BOUTON, INPUT);
9
  attachInterrupt(digitalPinToInterrupt(PORT_BOUTON), TraitementBP, RISING ); //Déclenchement sur front montant
10
11
}
12
void loop(){ 
13
}
14
void TraitementBP(){ //Traitement de l'interruption
15
  Serial.print("Etat led avant : ");
16
  Serial.print(etatLed);
17
  etatLed = !etatLed;
18
  Serial.print(" - Etat led apres : ");
19
  Serial.println(etatLed);
20
  digitalWrite(PORT_LED, etatLed);
21
}