单片机学习小组
直播中

李晶

7年用户 931经验值
私信 关注

如何通过LD3320模块以通信的方式来控制小车的方向?

如何通过LD3320模块以通信的方式来控制小车的方向?

回帖(1)

刘龙飞

2022-1-27 11:56:17
    设计过程

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

}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分