第十六篇、基于Arduino uno,一线串口通讯控制8900

您所在的位置:网站首页 usb线 第十六篇、基于Arduino uno,一线串口通讯控制8900

第十六篇、基于Arduino uno,一线串口通讯控制8900

2023-06-11 16:57| 来源: 网络整理| 查看: 265

0、结果

说明:向串口发送字符A,播放音效1;向串口发送字符B,播放音效2;向串口发送字符C,暂停播放音乐;向串口发送字符D,恢复播放音乐。

1、外观

说明:虽然8900-16p语音模块形态各异,但是原理和代码都是适用的。

2、连接电脑usb

说明:模块有usb接口,和电脑连接会显示一个U盘,我们需要将播放的文件放到这个U盘里。 将修改好名称的音频文件复制到此U盘中,注意是mp3格式的文件为宜。

 3、连线

 说明:只需要连接五根线。 uno————8900-16p语音模块

      5V--------------DC-5V   GND--------------GND         3--------------VPP   喇叭--------------SPK-   喇叭--------------SPK+

4、源程序

说明:发送不同的字符可以实现不同的功能,并将对应功能进行函数化,方便移植。

/****************************************8900-16P part****************************************/ /* 接线: 5V------DC-5V GND------GND D3------VPP 喇叭------SPK+ 喇叭------SPK- */ #define vppPin 3 //接vpp引脚 char val = ""; //接收串口发送过来的值 /****************************************set up and loop part*********************************/ void setup() { Serial.begin(9600); //设置串口波特率为9600 pinMode(vppPin, OUTPUT); //引脚设置成输出 Serial.println("设备上线!"); } void loop() { receiveUart(); } /****************************************8900-16P part****************************************/ /*接收串口发送的数据*/ void receiveUart() { while (Serial.available() > 0) { //检验在串口缓存区中是否有数据,如果有则返回1,没有就是0. val = char(Serial.read()); //Serial.read()一位一位的从串口缓存区里读数据 delay(10); controlRun() ; //串口控制运行 } } /*串口控制运行*/ void controlRun() { if (val == 'A') { //如果输入A,就播放第一首歌 sysRun1(); } else if (val == 'B') { //如果输入B,就播放第二首歌 sysRun2(); } else if (val == 'C') { //如果输入C,就暂停 sysStop(); } else if (val == 'D') { //如果输入D,就恢复播放 sysStart(); } } /*发送数据给模块*/ void SendData (char addr ) { //发送函数 digitalWrite(vppPin, HIGH); //开始拉高 delayMicroseconds ( 1000 ); digitalWrite(vppPin, LOW); //开始引导码 delayMicroseconds ( 3200 ); //此处延时最少要大于2ms for (int i = 0; i < 8; i++ ) { //总共8位数据 digitalWrite(vppPin, HIGH); if ( addr & 0x01 ) { //3:1表示数据位1,每个位用两个脉冲表示 delayMicroseconds ( 600 ); digitalWrite(vppPin, LOW); delayMicroseconds ( 200 ); } else { //1:3表示数据位0 ,每个位用两个脉冲表示 delayMicroseconds (200); digitalWrite(vppPin, LOW); delayMicroseconds ( 600 ); } addr >>= 1; } digitalWrite(vppPin, HIGH); } /*播放第一首歌*/ void sysRun1() { //输入控制信号之前,必须要先清除之前的数据 SendData(0x0a); //清空数字 SendData(0x03); //将音量设置为30 SendData(0x00); SendData(0x0c); //设置音量 //下面是实际的控制信号 SendData(0x0a); //清空数字 SendData(0x01); //对应00001.mp3 SendData(0x0b); //选曲播放,确认的意思 } /*播放第二首歌*/ void sysRun2() { //输入控制信号之前,必须要先清除之前的数据 SendData(0x0a); //清空数字 SendData(0x03); //将音量设置为30 SendData(0x00); SendData(0x0c); //设置音量 SendData(0x0a); //清空数字 SendData(0x02); //对应00002.mp3 SendData(0x0b); //选曲播放,确认的意思 } /*暂停播放*/ void sysStop() { //输入控制信号之前,必须要先清除之前的数据 SendData(0x0a); //清空数字 SendData(0x03); //将音量设置为30 SendData(0x00); SendData(0x0c); //设置音量 SendData(0x0a); //清空数字 SendData(0x12); //暂停的意思 } /*恢复播放*/ void sysStart() { //输入控制信号之前,必须要先清除之前的数据 SendData(0x0a); //清空数字 SendData(0x03); //将音量设置为30 SendData(0x00); SendData(0x0c); //设置音量 SendData(0x0a); //清空数字 SendData(0x11); //恢复播放 } 5、相关指令 6、注意事项

说明:程序在写入指令之前必须要清除指令。当控制信号为播放音乐的时候,可以不发送0x11。最好选取一个功率大一点的喇叭,不然声音很小。改变音量为0x03,应该是最大的音量了。

7、基本原理

        8900-16p语音模块是一种常用的语音识别和合成模块,可以与Arduino等微控制器进行通信,实现语音识别、播放、录音等功能。         工作原理方面,8900-16p模块基于数字信号处理技术和语音识别算法,可以识别和分析人类语言中的声音特征,并将其转换为可识别的数字信号。具体来说,8900-16p语音模块通过内置的麦克风或外接的声音传感器,采集用户的语音输入,并经过预处理和去噪等处理后,传输到芯片进行数字信号处理。模块内置了多种语音识别模型,可以对不同声音特征进行匹配和识别,从而判断用户的语音指令并进行相应的响应动作。         另外,8900-16p语音模块还具备语音合成功能,可以通过内置的音源或外接扬声器等播放设备,将预先定义好的文字信息转换为语音信号输出,实现对话交互等功能。         在Arduino中使用8900-16p语音模块,我们需要先将其正确连接到Arduino板上,并编写相应的程序进行控制。通常,可以通过串口通信等方式,将用户输入的语音指令传输到语音模块进行识别,并根据识别结果进行相应的处理和响应。同时,也可以通过编写语音合成程序,将特定的文字信息转换为相应的语音信号,并通过模块输出到外部播放设备进行播放。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3