buzzer-melodie.ino

Arduino Portenta H7 · Fichier : buzzer-melodie.ino · Langage : Arduino · Usage : Jouer une mélodie sur buzzer passif avec tone()

Une mélodie de test pour le buzzer passif : tone() du core Mbed s'appuie sur un timer matériel, la fréquence reste juste quelle que soit la charge du M7. La table de notes se joue en séquence non critique.

Matériel requis

Une Arduino Portenta H7 (module ST STM32H747 double cœur Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 Mo SDRAM, connecteur haut-density), alimentée par USB-C ou 5 V. 1 buzzer passif 3,3-5 V.

Câblage

Buzzer entre D6 et GND. Un buzzer actif (bip intégré) ne permet pas de varier la fréquence.

Fonctionnement

tone() configure un timer pour produire le créneau à la fréquence demandée ; la boucle lit la table (fréquence, durée) note par note.

Exécution

Arduino IDE avec le core « Arduino Mbed OS Portenta Boards » : choisir « Portenta H7 » (cœur M7), le port USB-C puis Téléverser. Le sélecteur M7/M4 du mode DFU permet de charger aussi le cœur M4.

Variantes

Stocker la mélodie en PROGMEM/flash, ou la déclencher depuis le M4 par RPC comme signal d'événement.

buzzer-melodie.ino

// Melodie sur buzzer passif (D6) : table de notes en flash.
const int BUZZER = 6;

const int MELODIE[][2] = {
  {523, 180}, {659, 180}, {784, 180}, {1046, 360},
  {784, 180}, {659, 180}, {523, 360},
  {0, 300},
  {587, 180}, {698, 180}, {880, 360}, {0, 400},
};

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

void loop() {
  for (auto &note : MELODIE) {
    if (note[0] == 0) noTone(BUZZER);
    else tone(BUZZER, note[0]);
    delay(note[1]);
  }
  delay(2500);
}

// tone() du core Mbed s'appuie sur un timer materiel : la
// frequence reste exacte meme a 240 MHz ou 480 MHz.

← Retour à la fiche