bouton-led.ino

Teensy 4.0 · Archivo : bouton-led.ino · Lenguaje : Arduino · Uso : Compteur d'appuis bouton avec anti-rebond matériel

El botón se lee por interrupción externa: no se pierde ninguna pulsación aunque loop() esté ocupada. Un filtro de 30 ms dentro de la ISR elimina el rebote, y la sección noInterrupts garantiza una lectura coherente del contador.

Hardware

Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, lógica de 3,3 V) alimentado por USB. 1 botón pulsador hacia GND.

Cableado

Botón entre el pin 2 y GND (resistencia interna activada por INPUT_PULLUP). Todos los pines son interrumpibles en Teensy.

Funcionamiento

attachInterrupt() engancha el flanco de bajada; la ISR incrementa un contador volatile. loop() imprime el contador y enciende el LED en cada número impar.

Ejecución

Con Teensyduino en el Arduino IDE, elige « Teensy 4.0 », Subir y confirma en el Teensy Loader. Los pines son de 3,3 V; el 4.0 es compatible en pines con el 3.2.

Variantes

Añade un botón de «reset», o envía el contador por MIDI (Note On) como disparador de caja de ritmos.

bouton-led.ino

// Compteur d'appuis : bouton sur interruption externe (EXTI).
const int BOUTON = 2; // broche interruptible (tout pin Teensy l'est)
const int LED = 13;

volatile unsigned long compteur = 0;
volatile unsigned long dernierFront = 0;

void surAppui() {
  unsigned long maintenant = millis();
  if (maintenant - dernierFront < 30) return; // anti-rebond 30 ms
  dernierFront = maintenant;
  compteur++;
}

void setup() {
  pinMode(BOUTON, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(BOUTON), surAppui, FALLING);
  Serial.begin(9600);
  Serial.println(F("Compteur d'appuis pret"));
}

void loop() {
  static unsigned long derniereAffichage = 0;
  if (millis() - derniereAffichage < 200) return;
  derniereAffichage = millis();

  noInterrupts();          // lecture atomique de la variable 32 bits
  unsigned long n = compteur;
  interrupts();

  digitalWrite(LED, (n % 2) ? HIGH : LOW);
  Serial.print(F("appuis = ")); Serial.println(n);
}

← Volver a la ficha