76|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;
}

 

点赞 关注
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
IC设计领域介绍及工程师未来出路规划

一、 IC 设计领域简介 (一)模拟与混号讯号电路设计 IC 电路可分为为模拟 IC 与数字 IC 两大类,以及两者兼具的混合讯号等三种 ...

基于ARM7与μClinux的嵌入式系统多串口设计

11764

FPGA DCM时钟管理单元的理解

看Xilinx的Datasheet会注意到Xilinx的FPGA没有PLL,其实DCM就是时间管理单元。 --------------------------------------------- ...

教你制作如同LaunchPad上的XDS100V2,自带串口

由于LaunchPad上没有仿真器接口,决定自己做一个XDS100V2,发现也没想象中的那么难。 把制作过程分享一下。 简易版的XDS10 ...

【R7F0C809】智能家居环境检测

系统简介: 1.开发板:首先充分利用开发板资源,使用了开发板的两位LED显示,用于温湿度显示;使用开发板两个按键,分别是KEY7 ...

拆了个额温枪

没事无聊的拆了个韩国的额温枪,淘宝价格要200多,不过拆开后看到里面确实不错,用料可以 604215604216 ...

【求助】冲击耐电压试验的目的是什么?它和浪涌有什么区别?

各位大神,好! 客人的壁挂式充电桩设备做5KV冲击电压试验损坏; 请问这个冲击电压试验是处于什么目的而测试的?5KV是哪 ...

【不到1块钱】4路输出、超简约电源开发板,多名工程师力荐

前些天收到微信推送的活动,不到5毛钱,就可以把4路输出、超简约电源开发板抱回家,想到正好还缺个调试电源,果断报名参加。 ...

【ST NUCLEO-U5A5ZJ-Q开发板测评】5、SPI和LCD

本帖最后由 chrisrh 于 2024-3-9 09:47 编辑 SPI和LCD LCD用的是个7789的2.4寸LCD,自己之前画的底板,适配插焊用的18PI ...

EMI 工程师完整指南(40000字,建议收藏)——第二部分

第 2 部分 — 噪声传播和滤 简介 高开关频率是在电源转换技术发展过程中促进尺寸减小的主要因 ...

关闭
站长推荐上一条 1/4 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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