完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
设计过程
(1)连接模块与芯片是 LD3320 ,Aduino的Wemos (2)通信方式为串口通信 (3)代码的讲解 前言 今天心血来潮想通过LD3320模块以通信的方式来控制小车的方向,当然你们也可用这代码来简单改一下来控制家电 比如电灯,更好的了解物联网的基本操作,多动手去完成一个一个成品或项目,培养研发的乐趣,这才是打开正确的学习方式。 WeMos D1 的特性 1 基于ESP-8266EX 2 ARDUINO兼容, 使用RDUINO IDE来编程 3 11*I/O引脚 4 1 * ADC 引脚(输入范围0 ~ 3.3) 5 板载5V 1A 开关电源 (高输入电压24V) 引脚的连接 LD3320—Arduino 3.3V—3.3V TXD—D3 RXD—D2 GND—GND 代码的讲解 LD3320模块从淘宝上买的时候,就会有相关的例程代码我们的语音部分的代码可以直接从上面去改,如图我是直接用普通模式的代码来做的。LD3320我们不用了解全部的代码,因为我们改的部分只有3个部分,懂得那3个部分就行,第一个部分是 User_handle(uint8 dat) 用户执行函数 第二部分为 LD_AsrAddFixed()向LD模块添加关键词 第三部分 //识别码客户修改处 如图 接下来我先放 LD3320模块的代码 LD_AsrAddFixed(); /************************************************************************ 功能描述: 向LD模块添加关键词 入口参数: none 返 回 值: flag:1->添加成功 其他说明: 用户修改. 1、根据如下格式添加拼音关键词,同时注意修改sRecog 和pCode 数组的长度 和对应变了k的循环置。拼音串和识别码是一一对应的。 2、开发者可以学习"语音识别芯片LD3320高阶秘籍.pdf"中 关于垃圾词语吸收错误的用法,来提供识别效果。 3、”xiao jie “ 为口令,故在每次识别时,必须先发一级口令“小捷” **************************************************************************/ uint8 LD_AsrAddFixed() { uint8 k, flag; uint8 nAsrAddLength; #define DATE_A 8 /*数组二维数值*/ #define DATE_B 20 /*数组一维数值*/ uint8 code sRecog[DATE_A][DATE_B] = { //该部份是你想输入的语音口令的拼音 "xiang qian", "xiang ho", "xiang zuo", "xiang you", }; /*添加关键词,用户修改*/ uint8 code pCode[DATE_A] = { //该部分是对应着拼音来写的识别码 CODE_XQ, CODE_HT, CODE_XZ, CODE_XY, }; /*添加识别码,用户修改*/ flag = 1; for (k=0; k if(LD_Check_ASRBusyFlag_b2() == 0) { flag = 0; break; } LD_WriteReg(0xc1, pCode[k] ); LD_WriteReg(0xc3, 0 ); LD_WriteReg(0x08, 0x04); delay(1); LD_WriteReg(0x08, 0x00); delay(1); for (nAsrAddLength=0; nAsrAddLength if (sRecog[k][nAsrAddLength] == 0) break; LD_WriteReg(0x5, sRecog[k][nAsrAddLength]); } LD_WriteReg(0xb9, nAsrAddLength); LD_WriteReg(0xb2, 0xff); LD_WriteReg(0x37, 0x04); } return flag; } LD_AsrAddFixed(); /*********************************************************** * 名 称:用户执行函数 * 功 能:识别成功后,执行动作可在此进行修改 * 入口参数: 无 * 出口参数:无 * 说 明: 通过控制PAx端口的高低电平,从而控制外部继电器的通断 **********************************************************/ void User_handle(uint8 dat) { switch(dat) /*对结果执行相关操作,客户修改*/ { case CODE_XQ: /*小车向前*/ UARTSendByte(0x01); // 向串口发送十六进制的命令 PrintCom("1rn"); //可在串口助手打印出命令字符 break; case CODE_HT: /*小车向后*/ UARTSendByte(0x10); PrintCom("10rn"); break; case CODE_XZ: /*小车向左*/ UARTSendByte(0x16); PrintCom("16rn"); break; case CODE_XY: /*小车向右*/ UARTSendByte(0x17); PrintCom("17rn"); break; } } LDCHIP.H文件中 找到自行修改自己需要的代码 //识别码客户修改处 #define CODE_XQ 0x01 //向前 #define CODE_HT 0x10 //向后 #define CODE_XZ 0x16 //向左 #define CODE_XY 0x17 //向右 接下来是Arduino 的代码(该段代码为接收语音模块的串口信号代码,语音模块每接收到一个指令,Wemos芯片的对应引脚就会产生相应的电平变化,我们可以利用这变化来设置相应的引脚中断,因为想到大伙不一定做小车,因此我只发了这段代码给大伙去开发,大家调试时可以用LED灯,或蜂鸣器去调试相应的引脚,当然有也可以用示波器) #include void setup() { pinMode(D3,OUTPUT); //设置IO口D3为输出模式 pinMode(D4,OUTPUT); //设置IO口D4为输出模式 Serial.begin(9600); digitalWrite(D2,LOW); //给D2口低电平 digitalWrite(D3,LOW); //给D3口低电平 delay(3000); } void loop() { int cmd; if(Serial.available() > 0){ cmd = Serial.read(); switch(cmd) { case 1: //前面提到的读取到1表示向前 digitalWrite(D3,HIGH);//当喊“向前”时,可以看到Arduino上的D3会置高 break; case 10: digitalWrite(D3,LOW);//当喊“向前”时,可以看到Arduino上的D3会置低 break; break; case 0x16: digitalWrite(D4,HIGH);//当喊“向前”时,可以看到Arduino上的D4会置高 break; case 0x17: digitalWrite(D4,LOW);//当喊“向前”时,可以看到Arduino上的D4会置低 break; default: break; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
3148 浏览 0 评论
3362 浏览 9 评论
3048 浏览 16 评论
3540 浏览 1 评论
9157 浏览 16 评论
1285浏览 3评论
661浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
652浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2398浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1964浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-13 11:20 , Processed in 1.085326 second(s), Total 46, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191