Menu
CoddyTech

DESCENDANT, MONTANT et CHANGEMENT

Fait partie de la section Gestion du temps sans delay du Journey Arduino de Coddy. Leçon 13 sur 18.

L’Uno possède deux broches pouvant déclencher une interruption : la broche 2 et la broche 3. Un bouton qui nécessite une interruption doit être connecté à l’une d’elles. À l’intérieur de la puce, elles correspondent aux interruptions 0 et 1 ; laisse donc digitalPinToInterrupt() convertir la broche en son numéro. attachInterrupt(3, ...) demande l’interruption 3, que l’Uno ne possède pas, et rien ne se passe.

Le dernier argument de attachInterrupt() indique à quel changement réagir :

  • FALLING : la broche passe de HIGH à LOW (avec une résistance de rappel au niveau haut, un appui)
  • RISING : la broche passe de LOW à HIGH (un relâchement)
  • CHANGE : l’un ou l’autre

Avec CHANGE, l’ISR s’exécute lors de l’appui et du relâchement. Elle lit la broche pour déterminer lequel s’est produit :

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // le bouton a été enfoncé
  } else {
    // le bouton a été relâché
  }
}

attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);
challenge icon

Défi

Facile

Le bouton est connecté à la broche 3, et loop() est occupée par une tâche lente. Fais en sorte que la LED sur la broche 13 suive instantanément le bouton :

  • dans onChange(), lis le bouton : LOW allume la LED, HIGH l’éteint
  • associe onChange() à la broche du bouton avec CHANGE

Appuie sur Run, maintiens le bouton enfoncé puis relâche-le, et ensuite appuie sur Check.

Essayez vous-même

const int ledPin = 13;
const int buttonPin = 3;

// S’exécute chaque fois que l’état de la broche du bouton change.
void onChange() {
  // allume la LED quand le bouton est enfoncé, éteins-la quand il est relâché
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // associe onChange() à la broche du bouton ici
}

void loop() {
  // la tâche lente : laisse-la telle quelle
  Serial.println("working");
  delay(2000);
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Gestion du temps sans delay

Entraînez-vous par vous-même : Playground Arduino