记录一下吧,简单地实现了arduino 连接蓝牙,发送指令控制音频播放。

JQ8400 使用的是一线串口通讯,电路图如下:

 引脚功能如下:

#include <SoftwareSerial.h>
#include <Servo.h>
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(6, 7);  //新建对象,接收脚为6,发送脚为7
char val ;  //存储接收的变量

Servo myservo1;//定义舵机1变量名
Servo myservo2;//定义舵机2变量名

void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率
  pinMode(3,OUTPUT);
  myservo1.attach(9);//定义舵机接口(9、10 都可以,缺点只能控制2 个)
  myservo2.attach(10);//定义舵机接口(9、10 都可以,缺点只能控制2 个)
}

void loop() {
//  如果串口接收到数据,就输出到蓝牙串口
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  //如果接收到蓝牙模块的数据,输出到屏幕
  if (BT.available()) {
    val = BT.read();
    Serial.println(val);
    if(val == '1'){
      Serial.println("da a1!!");
      myservo1.write(0);//设置舵机旋转的角度
       //发送0x01
      SendData(0x0a);
      SendData(0x01);
      SendData(0x0b);
      val = "";
      delay(5000);
      myservo1.write(90);//设置舵机旋转的角度
    }
    if(val == '2'){
      myservo2.write(180);//设置舵机旋转的角度
      SendData(0x0a);
      SendData(0x02);
      SendData(0x0b);
      val = "";
      delay(5000);
      myservo2.write(90);//设置舵机旋转的角度
    }
    if(val == '3'){
      SendData(0x0a);
      SendData(0x03);
      SendData(0x0b);
      val = "";
    }
    if(val == '4'){
      SendData(0x0a);
      SendData(0x04);
      SendData(0x0b);
      val = "";
    }
    if(val == '5'){
      myservo1.write(0);//设置舵机旋转的角度
      SendData(0x0a);
      SendData(0x05);
      SendData(0x0b);
      val = "";
      delay(4000);
      myservo1.write(90);//设置舵机旋转的角度  
    }
    if(val == '6'){
      myservo2.write(180);//设置舵机旋转的角度
      SendData(0x0a);
      SendData(0x06);
      SendData(0x0b);
      val = "";
      delay(4000);
      myservo2.write(90);//设置舵机旋转的角度
    }
}
}

//语音模块函数
void SendData (char addr )//发送函数。
{    
    digitalWrite(3,HIGH); /*开始拉高*/
    delayMicroseconds ( 1000 );
    digitalWrite(3,LOW); /*开始引导码*/
    delayMicroseconds ( 3200 );/*此处延时最少要大于2ms*/
    for (int i = 0; i < 8; i++ ) /*总共8位数据  */
    {
        digitalWrite(3,HIGH);
        if ( addr & 0x01 ) /*3:1表示数据位1,每个位用两个脉冲表示  */
        {
            delayMicroseconds ( 600 );
            digitalWrite(3,LOW);
            delayMicroseconds ( 200 );
        }
        else              /*1:3表示数据位0 ,每个位用两个脉冲表示  */
        {
            delayMicroseconds ( 200 );
            digitalWrite(3,LOW);
            delayMicroseconds ( 600 );
        }
        addr >>= 1;
    }
    digitalWrite(3,HIGH);    
}

利用蓝牙发送1、2、3、4、5、6然后判断播放不同音乐。(音乐要提前存进JQ8400,命名按手册规范)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐