记录一下吧,简单地实现了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,命名按手册规范)