LD3320语音识别模块学习(1)——控制电机转动

本文介绍如何使用LD3320语音模块控制电机转向,通过修改特定代码实现向左、向右及停车功能。后续计划实现语音模块与单片机的串行通信,进一步通过2.4G模块远程控制小车方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

·通过语音模块(LD3320)控制电机转动方向,其实这个语音模块的代码网上很全,淘宝会提供一套完整的开发代码,我们使用者其实不需要关注它的具体实现过程,只需要掌握如何去修改代码完成功能即可。

修改的部分代码如下:

/******wantin modify  2018.12.4*********/
sbit EN  = P1^0;  //    电机输入输出1,2
sbit IN1 = P1^1;  //    输入1
sbit IN2 = P1^2;  //    输入2

 

void 	User_handle(uint8 dat)
{
     //UARTSendByte(dat);//串口识别码(十六进制)

			 switch(dat)		   /*对结果执行相关操作,客户修改*/
			  {
				  case CODE_DMCS:			/*命令“测试”*/
						PrintCom("“代码测试”命令识别成功\r\n"); /*text.....*/
													 break;
					case CODE_KFBYZ:	 /*命令“全开”*/
						PrintCom("“开发板验证”命令识别成功\r\n"); /*text.....*/
													 break;
					case CODE_XZ:		/*命令“复位”*/				
						PrintCom("“向左”命令识别成功\r\n"); /*text.....*/
                        IN1=1;  //  add wt
                        IN2=0;  //  add wt
						break;  //  add wt
					case CODE_XY:		/*命令“复位”*/				
						PrintCom("“向右”命令识别成功\r\n"); /*text.....*/
                        IN1=0;  //  add wt
                        IN2=1;  //  add wt
						break;
					case CODE_QJ:		/*命令“复位”*/				
						PrintCom("“前进”命令识别成功\r\n"); /*text.....*/
													break;
					case CODE_HT:		/*命令“复位”*/				
						PrintCom("“后退”命令识别成功\r\n"); /*text.....*/
													break;
					case CODE_TC:		/*命令“复位”*/				
						PrintCom("“停车”命令识别成功\r\n"); /*text.....*/
                        IN1=0;  //  add wt
                        IN2=0;  //  add wt
						break;																											
							default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;
				}	
}	 

说出 向左,向右或停车,电机则会完成相应功能,下面的博客我将准备实现语音模块与单片机进行串行通信,再通过2.4G模块进行远程控制小车方向。

以下是基于STM32F103驱动LD3320语音识别模块的代码示例: ```c #include "stm32f10x.h" #include "usart.h" #include "delay.h" #define LD3320_SCK_H() GPIO_SetBits(GPIOB,GPIO_Pin_15) //CLK高电平 #define LD3320_SCK_L() GPIO_ResetBits(GPIOB,GPIO_Pin_15) //CLK低电平 #define LD3320_SDA_H() GPIO_SetBits(GPIOB,GPIO_Pin_14) //DAT高电平 #define LD3320_SDA_L() GPIO_ResetBits(GPIOB,GPIO_Pin_14) //DAT低电平 void LD3320_Delay_us(u32 nus) //us级延时 { u32 i; for(i=0;i<nus;i++); } void LD3320_GPIO_Configuration(void) //LD3320口初始化 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } void LD3320_Reset(void) //LD3320复位 { LD3320_SDA_H(); LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); LD3320_SDA_L(); LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SDA_H(); LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); } void LD3320_Write(u8 reg,u8 data) //向LD3320写数据 { u8 i; LD3320_SCK_L(); LD3320_SDA_H(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); LD3320_SDA_L(); LD3320_Delay_us(1); for(i=0;i<8;i++) { if(reg&0x80) { LD3320_SDA_H(); } else { LD3320_SDA_L(); } reg<<=1; LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); } for(i=0;i<8;i++) { if(data&0x80) { LD3320_SDA_H(); } else { LD3320_SDA_L(); } data<<=1; LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); } LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SDA_H(); LD3320_Delay_us(1); } u8 LD3320_Read(u8 reg) //从LD3320读数据 { u8 i,data=0; LD3320_SCK_L(); LD3320_SDA_H(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); LD3320_SDA_L(); LD3320_Delay_us(1); for(i=0;i<8;i++) { if(reg&0x80) { LD3320_SDA_H(); } else { LD3320_SDA_L(); } reg<<=1; LD3320_Delay_us(1); LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SCK_H(); LD3320_Delay_us(1); } LD3320_SDA_H(); LD3320_Delay_us(1); for(i=0;i<8;i++) { LD3320_SCK_L(); LD3320_Delay_us(1); data<<=1; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)) { data|=0x01; } LD3320_SCK_H(); LD3320_Delay_us(1); } LD3320_SCK_L(); LD3320_Delay_us(1); LD3320_SDA_H(); LD3320_Delay_us(1); return data; } void LD3320_Init(void) //LD3320初始化 { LD3320_GPIO_Configuration(); LD3320_Reset(); LD3320_Write(0x06,0x00); LD3320_Write(0x00,0x3f); } void LD3320_Start(void) //LD3320开始识别 { LD3320_Write(0x04,0x01); } void LD3320_Stop(void) //LD3320停止识别 { LD3320_Write(0x04,0x00); } int main(void) //主函数 { USART1_Configuration(); Delay_Init(); LD3320_Init(); while(1) { LD3320_Start(); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)); //等待语音识别完成 USART1_Send_String("Voice Recognized!\r\n"); LD3320_Stop(); Delay_ms(500); } } ``` 需要注意的是,此代码仅供参考,具体实现还需要根据自己的实际情况进行调整。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值