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 deHIGHàLOW(avec une résistance de rappel au niveau haut, un appui)RISING: la broche passe deLOWà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);Défi
FacileLe 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 :LOWallume la LED,HIGHl’éteint - associe
onChange()à la broche du bouton avecCHANGE
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);
}
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
3Interruptions
Un appui que la boucle ne détecte pasDESCENDANT, MONTANT et CHANGEMENTPartager avec volatileCompter les appuis avec une interruptionEntraînez-vous par vous-même : Playground Arduino