我使用了arduino nano平台开发,语音芯片使用了LD3320,蓝牙模块使用了HC05主从一体模块。现在小车语音控制的遥控器和接收端可以代码已经实现了。
功能框图如下
//语音接收端
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
//定义一个变量adata存储接收结果
unsigned int adata = 0;
int back1 = 2;
int up1 = 3;
int back2 = 4;
int up2 = 5;
void setup()
{
Mirf.cePin = 9; //设置CE引脚为D9
Mirf.csnPin = 10; //设置CE引脚为D10
Mirf.spi = &MirfHardwareSpi;
Mirf.init(); //初始化nRF24L01
//设置接收标识符"Rec01"
Mirf.setRADDR((byte *)"Rec01");
//设置一次收发的字节数,这里发一个整数,写sizeof(unsigned int),实际等于2字节
Mirf.payload = sizeof(unsigned int);
Mirf.channel = 3;
Mirf.config();
pinMode(up1,OUTPUT);
pinMode(back1,OUTPUT);
pinMode(up2,OUTPUT);
pinMode(back2,OUTPUT);
digitalWrite(up1,LOW);
digitalWrite(back1,LOW);
digitalWrite(up2,LOW);
digitalWrite(back2,LOW);
}
void loop()
{
READ();
RUN();
}
void READ()
{
byte data[Mirf.payload];
if(Mirf.dataReady()) //等待接收数据准备好
{
Mirf.getData(data); //接收数据到data数组
//data[1]<左移8位与data[0]并,重组数据。
adata = (unsigned int)((data[1] << 8) | data[0]);
}
}
void RUN()
{
if(adata==0)//STOP
{
digitalWrite(up1,LOW);
digitalWrite(back1,LOW);
digitalWrite(up2,LOW);
digitalWrite(back2,LOW);
}
if(adata==1)//Left
{
digitalWrite(up1,HIGH);
digitalWrite(back1,LOW);
digitalWrite(up2,LOW);
digitalWrite(back2,LOW);
}
if(adata==2)//Right
{
digitalWrite(up1,LOW);
digitalWrite(back1,LOW);
digitalWrite(up2,HIGH);
digitalWrite(back2,LOW);
}
if(adata==3)//Go forward
{
digitalWrite(up1,HIGH);
digitalWrite(back1,LOW);
digitalWrite(up2,HIGH);
digitalWrite(back2,LOW);
}
if(adata==4)//Back
{
digitalWrite(up1,LOW);
digitalWrite(back1,HIGH);
digitalWrite(up2,LOW);
digitalWrite(back2,HIGH);
}
}
//语音遥控器端
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup()
{
Mirf.cePin = 9; //设置CE引脚为D9
Mirf.csnPin = 10; //设置CE引脚为D10
Mirf.spi = &MirfHardwareSpi;
Mirf.init(); //初始化nRF24L01
//设置接收标识符"Sen01"
Mirf.setRADDR((byte *)"Sen01");
//设置一次收发的字节数,这里发一个整数,写sizeof(unsigned int),实际等于2字节
Mirf.payload = sizeof(unsigned int);
//发送通道,可以填0~128,收发必须一致。
Mirf.channel = 3;
Mirf.config();
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
pinMode(6,INPUT_PULLUP);
}
void loop()
{
if(digitalRead(2)==0)//D2引脚是低电平的时候,发送"1"
sendMirf(1);
if(digitalRead(3)==0)//D3引脚是低电平的时候,发送"2"
sendMirf(2);
if(digitalRead(4)==0)//D4引脚是低电平的时候,发送"3"
sendMirf(3);
if(digitalRead(5)==0)//D5引脚是低电平的时候,发送"4"
sendMirf(4);
if(digitalRead(6)==0)//D6引脚是低电平的时候,发送"0"
sendMirf(0);
delay(20);
}
void sendMirf(unsigned int adata)
{
//下面定义byte数组,存放待发数据
byte data[Mirf.payload];
data[0] = adata & 0xFF; //低八位给data[0],
data[1] = adata >> 8; //高八位给data[1]。
//发送数据
Mirf.setTADDR((byte *)"Rec01");
Mirf.send(data);
//等待发送完毕,进行下一步操作。
while(Mirf.isSending()) {}
}
现在我需要在小车上添加第二种蓝牙控制方式,请问应该如何实现?求解答!
提供一篇手机和蓝牙通信的文章,看看是否有帮助 https://blog.csdn.net/qq_38410730/article/details/80368485
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y