buzzer-melodie.ino

Teensy 3.2 · Fichier : buzzer-melodie.ino · Langage : Arduino · Usage : Mélodie sur buzzer avec tone() et table de notes

Une gamme montante puis descendante joue sur un buzzer passif via tone(). La mélodie est stockée en flash (PROGMEM + pgm_read_near_int), une habitude saine qui garde la RAM libre pour le traitement audio ou capteur.

Matériel requis

Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, logique 3,3 V) alimenté par USB. 1 buzzer passif 3,3-5 V.

Câblage

Buzzer entre la broche 16 et GND. Sur Teensy, tone() marche sur presque toutes les broches sans conflit de timer.

Fonctionnement

tone(broche, fréquence, durée) configure un PWM audio ; la table lue depuis la flash évite de consommer la RAM. Le 0 dans la table marque une pause.

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

Passer à la bibliothèque Audio du Teensy pour mixer plusieurs voix sonores, ou jouer une mélodie reçue en MIDI sur USB.

buzzer-melodie.ino

// Melodie sur buzzer passif : tone() + table de notes en flash.
const int BUZZER = 16;

const int MELODIE[] PROGMEM = {
  523, 587, 659, 698, 784, 880, 988, 1046, // gamme montante (Hz)
  1046, 988, 880, 784, 698, 659, 587, 523, // gamme descendante
  0 // 0 = silence
};

void setup() {
  Serial.begin(9600);
  Serial.println(F("Melodie Teensy"));
}

void loop() {
  int n = sizeof(MELODIE) / sizeof(MELODIE[0]);
  for (int i = 0; i < n; i++) {
    int f = pgm_read_near_int(&MELODIE[i]); // lecture depuis la flash
    if (f == 0) {
      noTone(BUZZER);
      delay(300);
    } else {
      tone(BUZZER, f, 180); // 180 ms par note
      delay(200);
    }
  }
  delay(2000);
}

// Sur Teensy, tone() fonctionne sur a peu pres toutes les broches
// et ne gene pas les autres timers (contrairement aux AVR).

← Retour à la fiche