
Arduino 上手教程
CoreMatrix 蜂鸣器相关 API 与案例程序。
3.3.10-aM5CoreMatrix0.2.290.2.36CoreMatrix 使用无源蜂鸣器,蜂鸣器电源由 M5IOE1 IO2 / PYB_BUZZER_EN 控制,PWM 信号由 M5IOE1 IO11 / PYB_BUZZER_PWM 的 PWM 通道 3 产生。
#include <M5Unified.h>
#include <utility/M5IOE1_Class.hpp>
static constexpr auto BUZZER_EN = m5::M5IOE1_Class::gpio2;
static constexpr auto BUZZER_PWM = m5::M5IOE1_Class::pwm_ch3;
static constexpr auto BUZZER_PWM_PIN = m5::M5IOE1_Class::gpio11;
static void drawPlaying(bool playing)
{
M5.Display.startWrite();
M5.Display.fillScreen(TFT_BLACK);
M5.Display.drawRect(0, 0, 16, 16, TFT_WHITE);
if (playing) {
M5.Display.fillRect(3, 5, 5, 6, TFT_WHITE);
M5.Display.drawLine(9, 6, 13, 3, TFT_WHITE);
M5.Display.drawLine(9, 8, 14, 8, TFT_WHITE);
M5.Display.drawLine(9, 10, 13, 13, TFT_WHITE);
}
M5.Display.endWrite();
M5.Display.display();
}
static bool playTone(uint16_t frequency, uint16_t duration)
{
auto& ioe = static_cast<m5::M5IOE1_Class&>(M5.getIOExpander(0));
if (!ioe.setPwmFrequency(frequency) ||
!ioe.setPwmDuty12bit(BUZZER_PWM, 2048,
m5::pwm_polarity_t::normal, true)) {
return false;
}
drawPlaying(true);
delay(duration);
ioe.setPwmDuty12bit(BUZZER_PWM, 0, m5::pwm_polarity_t::normal, false);
drawPlaying(false);
delay(50);
return true;
}
void setup()
{
auto cfg = M5.config();
cfg.serial_baudrate = 115200;
M5.begin(cfg);
M5.Display.setColorDepth(8);
M5.Display.setRotation(1);
M5.Display.setBrightness(128);
auto& ioe = static_cast<m5::M5IOE1_Class&>(M5.getIOExpander(0));
// M5IOE1 IO2 -> PYB_BUZZER_EN
ioe.setHighImpedance(BUZZER_EN, false);
ioe.setPullMode(BUZZER_EN, m5::IOExpander_Base::pull_none);
ioe.setDirection(BUZZER_EN, true);
ioe.digitalWrite(BUZZER_EN, true);
// M5IOE1 IO11 -> PYB_BUZZER_PWM, PWM channel 3
ioe.setHighImpedance(BUZZER_PWM_PIN, false);
ioe.setDirection(BUZZER_PWM_PIN, true);
ioe.setPwmDuty12bit(BUZZER_PWM, 0, m5::pwm_polarity_t::normal, false);
drawPlaying(false);
delay(20);
}
void loop()
{
playTone(880, 500);
playTone(990, 500);
playTone(1120, 500);
playTone(1180, 500);
playTone(1320, 500);
playTone(1480, 500);
playTone(1650, 500);
playTone(1760, 500);
playTone(2731, 500);
delay(500);
}蜂鸣器依次播放 880 Hz、990 Hz、1120 Hz、1180 Hz、1320 Hz、1480 Hz、1650 Hz、1760 Hz 和 2731 Hz 的测试音,每个音持续 500 ms;发声时点阵显示扬声器图案。
