buzzer-melodie.ino
Una escala ascendente y luego descendente suena en un zumbador pasivo con tone(). La melodía vive en la flash (PROGMEM + pgm_read_near_int), costumbre sana que deja la RAM libre para el tratamiento de audio o sensores.
Hardware
Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, lógica de 3,3 V) alimentado por USB. 1 zumbador pasivo de 3,3-5 V.
Cableado
Zumbador entre el pin 16 y GND. En Teensy, tone() funciona en casi todos los pines sin conflictos de temporizador.
Funcionamiento
tone(pin, frecuencia, duración) configura un PWM de audio; leer la tabla desde la flash ahorra RAM. Un 0 en la tabla marca una pausa.
Ejecución
Instala el plugin Teensyduino en el Arduino IDE, elige la placa « Teensy 3.2 », pulsa Subir y luego el botón del Teensy Loader. Atención: pines de 3,3 V.
Variantes
Pasa a la librería Audio del Teensy para mezclar varias voces sonoras, o toca una melodía recibida por MIDI 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).