如何实现arduino小车蓝牙和语音双模控制?

我使用了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