buzzer-melodie.ino
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 4.1 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V, Ethernet et stockage flash additionnel) 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
Teensyduino dans l'Arduino IDE, carte « Teensy 4.1 », Téléverser puis bouton du Teensy Loader. Broches 3,3 V ; le 4.1 ajoute Ethernet, USB host et broches supplémentaires.
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).