pwm-buzzer-tone-8.ino
Utilise le module PWM du Sapphire pour piloter un buzzer passif et produire des notes de musique.
Connectez un buzzer passif entre le pin GPIO défini en mode PWM et la masse. Configurez la fréquence de base du PWM. L'exemple génère une triade Do-Mi-Sol. Ajustez les délais pour le tempo. Nécessite la configuration du multiplexage GPIO dans le fichier de contrainte Efinity.
pwm-buzzer-tone-8.ino
#include "xhal_pwm.h"
#include "xhal_gpio.h"
#include "xhal_timer.h"
#define BUZZER_PIN GPIO_PIN_10 // Pin PWM capable
#define PWM_INSTANCE XHAL_PWM0
#define PWM_CHANNEL 0
// Fréquences musicales (approx)
#define NOTE_C4 262
#define NOTE_E4 330
#define NOTE_G4 392
void play_note(int freq, int duration_ms) {
if (freq > 0) {
xhal_pwm_set_duty(PWM_INSTANCE, PWM_CHANNEL, 50); // 50% duty
xhal_pwm_set_freq(HZ, freq); // Hypothetical API or calculate period
xhal_pwm_enable(PWM_INSTANCE, PWM_CHANNEL);
} else {
xhal_pwm_disable(PWM_INSTANCE, PWM_CHANNEL);
}
xhal_timer_delay_ms(duration_ms);
xhal_pwm_disable(PWM_INSTANCE, PWM_CHANNEL);
}
int main(void) {
xhal_gpio_init();
xhal_gpio_config(BUZZER_PIN, GPIO_ALTERNATE); // Set to PWM function
xhal_pwm_init(PWM_INSTANCE, 1000000); // Base clock
while(1) {
play_note(NOTE_C4, 200);
play_note(NOTE_E4, 200);
play_note(NOTE_G4, 200);
play_note(0, 200); // Silence
}
}