clignotante.ino

Teensy 3.2 · Fichier : clignotante.ino · Langage : Arduino · Usage : Faire clignoter la LED intégrée à 1 Hz

La LED de la broche 13 clignote à 1 Hz, pilotée depuis l'interruption SysTick : loop() reste entièrement libre. Un motif typique des cartes Teensy, dont le cœur ARM Cortex-M gère de vraies interruptions matérielles.

Matériel requis

Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, logique 3,3 V) alimenté par USB. Aucun composant externe ; la LED utilisateur de la carte suffit.

Câblage

Rien à câbler pour la LED 13. Attention : les broches Teensy travaillent en 3,3 V, pas 5 V.

Fonctionnement

La fonction systick_loop(), spécifique à Teensyduino, est appelée chaque milliseconde par le noyau ; elle teste millis() et bascule la broche. Les variables partagées sont volatile pour éviter les optimisations du compilateur.

Exécution

Installer le plugin Teensyduino dans l'Arduino IDE, choisir la carte « Teensy 3.2 », cliquer sur Téléverser puis sur le bouton du Teensy Loader. Attention : broches en 3,3 V.

Variantes

Version simple avec delay(500) dans loop(), ou deux LED à des fréquences différentes en dupliquant la logique avec un tableau de périodes.

clignotante.ino

// Clignotement LED sur la broche 13 (LED utilisateur Teensy).
const int LED = 13;

volatile bool etat = false;
volatile uint32_t dernierBlink = 0;

// systick_loop() est une specificite Teensy : appelee chaque ms
// par le noyau, la LED clignote meme si loop() est occupee ailleurs.
void systick_loop() {
  uint32_t maintenant = millis();
  if (maintenant - dernierBlink >= 1000) {
    dernierBlink = maintenant;
    etat = !etat;
    digitalWrite(LED, etat);
  }
}

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  while (!Serial && millis() < 2000); // attend l'ouverture du moniteur
  Serial.println(F("Clignotement Teensy demarre"));
}

void loop() {
  // Le coeur de travail est dans systick_loop() : loop() reste
  // 100 % disponible pour d'autres traitements.
}

← Retour à la fiche