158|0

17

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第4期】通过响指开/关板载 LED [复制链接]

 

    功能介绍

    利用麦克风传感器,实现打响指来控制板载 LED 绿灯的开或关。

    此任务参考了 Arduino 官方教程示例 Reading Microphone Data on Nano RP2040 Connect

 

 

    流程图

 
 

    演示视频

 


 

 

    示例代码

  • #include <WiFiNINA.h>
  • #include <PDM.h>
  • // 声道数量(单通道)
  • static const char channels = 1;
  • // PDM 数据的采样率(单位:Hz)
  • static const int frequency = 20000;
  • // 用于存储音频样本的缓冲区,每个样本是 16 位
  • short sampleBuffer[512];
  • // 读取到的音频样本数量,使用 volatile 修饰以确保线程安全
  • volatile int samplesRead;
  • // 用于控制 LED 开关状态的布尔变量
  • bool LED_SWITCH = false;
  • // 样本值的阈值(绝对值大于该值时切换 LED 状态)
  • const int THRESHOLD = 10000;
  • void setup() {
  • // 初始化串口,用于调试和打印信息
  • Serial.begin(9600);
  • // 设置 LED 引脚为输出模式
  • pinMode(LEDG, OUTPUT);
  • // 等待串口连接(仅用于调试模式)
  • while (!Serial);
  • // 配置 PDM 麦克风的数据接收回调函数
  • PDM.onReceive(onPDMdata);
  • // 初始化 PDM 麦克风
  • if (!PDM.begin(channels, frequency)) {
  • Serial.println("PDM 初始化失败!");
  • while (1); // 如果初始化失败,则进入死循环
  • }
  • }
  • void loop() {
  • // 检查是否有新的音频样本
  • if (samplesRead) {
  • // 遍历读取到的样本数据
  • for (int i = 0; i < samplesRead; i++) {
  • // 打印当前样本值到串口监视器(用于调试)
  • Serial.println(sampleBuffer[i]);
  • // 如果样本值超过阈值(绝对值大于 THRESHOLD),切换 LED 状态
  • if (abs(sampleBuffer[i]) > THRESHOLD) {
  • LED_SWITCH = !LED_SWITCH; // 切换 LED 状态
  • if (LED_SWITCH) {
  • digitalWrite(LEDG, HIGH); // 打开绿灯
  • Serial.println("绿灯已开启!");
  • } else {
  • digitalWrite(LEDG, LOW); // 关闭绿灯
  • Serial.println("绿灯已关闭!");
  • }
  • delay(1000); // 延迟 1 秒,避免过于频繁的切换
  • }
  • }
  • // 清除样本读取计数
  • samplesRead = 0;
  • }
  • }
  • /**
  • * 回调函数,用于处理 PDM 麦克风采集的数据。
  • */
  • void onPDMdata() {
  • // 查询缓冲区中可用字节数
  • int bytesAvailable = PDM.available();
  • // 从缓冲区读取音频数据到样本缓冲区
  • PDM.read(sampleBuffer, bytesAvailable);
  • // 每个样本为 16 位(2 字节),计算样本数量
  • samplesRead = bytesAvailable / 2;
  • }

 

点赞(1) 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
ADI 探索季,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道!
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表