SU-03T1语音模块结合uno开发板控制灯光开关快速实践
文章目录通过智能公元零代码配置烧录SDK烧录SU-03并链接uno开发版链接成功后编写arduino程序本文将从一个软件工程师的角度出发带您快速入门硬件编程使用SU-03T1语音模块结合uno开发板来实现语音控制灯光开启关闭。通过智能公元零代码配置烧录SDK智能公元地址https://smartpi.cn/#/YzsM注意配置控制详情注意控制详情开关输出的高低电平需要设置相反的否则灯光闪烁。下载最新版本固件下载并打开烧录程序https://help.aimachip.com/docs/offline_su03t/su_03t_kfb选择镜像并点击烧录提示等待设备。这里可以拔插SU03的VCC接口等待数秒直到设备状态变化。烧录SU-03并链接uno开发版USB-TO-TTL连接SU-03USBSU-035VvccGNDGNDRXDB7TXDB6UNO板子SU-035VvccGNDGNDD11B7D10B6由于我设置了通电开始打招呼会有语音提示。链接5V和GND就通电了。另外D10和D11接反了也是没有关系的可能只是指令反了这个如果不想修改也可以在程序代码里面把两个端口调整过来就行。链接成功后编写arduino程序/* * 项目名称语音控制 LED 开关逻辑 * 硬件连接 * - B6_PIN (10): 连接语音模块的“开灯”信号输出 * - B7_PIN (11): 连接语音模块的“关灯”信号输出 * - LED_PIN (13): 连接 LED 正极支持 PWM 调光 */// --- 引脚定义 ---constintB6_PIN10;// 定义开灯信号输入引脚constintB7_PIN11;// 定义关灯信号输入引脚constintLED_PIN13;// 定义 LED 输出引脚// --- 全局变量 ---bool ledStatefalse;// 记录 LED 当前的逻辑状态 (false关, true开)intbrightness255;// LED 亮度值 (0-255)255 为最亮// --- 状态记忆变量 (用于边缘检测) ---// 记录上一次循环时引脚的电平状态用于对比判断信号是否发生了“跳变”bool lastB6LOW;bool lastB7LOW;/** * 初始化函数 * 系统上电后只运行一次 */voidsetup(){// 1. 配置引脚模式pinMode(B6_PIN,INPUT);// 将 B6 设置为输入模式用于读取语音模块信号pinMode(B7_PIN,INPUT);// 将 B7 设置为输入模式pinMode(LED_PIN,OUTPUT);// 将 LED 引脚设置为输出模式用于驱动 LED// 2. 初始状态设置analogWrite(LED_PIN,0);// 初始化 LED 为关闭状态 (PWM 值为 0)// 3. 串口通信初始化Serial.begin(115200);// 启动串口通信波特率 115200// F() 宏用于将字符串存储在 Flash 中节省宝贵的 SRAM 内存Serial.println(F( 语音LED控制程序已启动 ));}/** * 主循环函数 * 系统会无限重复执行此函数 */voidloop(){// --- 1. 读取当前输入状态 ---// 读取引脚当前的电平HIGH 代表有信号LOW 代表无信号bool currentB6digitalRead(B6_PIN);bool currentB7digitalRead(B7_PIN);// --- 2. 边缘检测逻辑 (上升沿检测) ---// 为什么要这样做// 语音模块通常只发送一个短暂的脉冲信号。如果我们只判断 if (currentB6 HIGH)// 可能会因为信号持续时间极短而漏掉或者因为信号一直维持在高电平导致重复触发。// 上升沿 意思是上一次是低电平这一次变成了高电平说明刚刚发生了一个动作。// 检测 B6 (开灯) 的上升沿if(currentB6HIGHlastB6LOW){ledStatetrue;// 更新内部状态记录analogWrite(LED_PIN,brightness);// 输出 PWM 信号点亮 LEDSerial.println(F(✓ 检测到开灯信号 - 灯已打开));}// 检测 B7 (关灯) 的上升沿if(currentB7HIGHlastB7LOW){ledStatefalse;// 更新内部状态记录analogWrite(LED_PIN,0);// 输出 0 值熄灭 LEDSerial.println(F(✓ 检测到关灯信号 - 灯已关闭));}// --- 3. 更新历史状态 ---// 将当前的电平状态保存下来供下一次 loop 循环时与“新的当前状态”做对比lastB6currentB6;lastB7currentB7;// --- 4. 延时与防抖 ---delay(10);// 短暂延时 10ms// 作用// 1. 简单的软件消抖防止信号干扰导致的误判。// 2. 控制循环频率避免串口打印过快导致卡顿。}