本文蓝牙采用的是HC-05蓝牙模块,该模块为主从一体、民用级的。
主从一体模块与从模块区别
“主从一体模块”:就是可以发出配对请求,又可以接受配对请求的。
“从模块”:就是只能接受配对请求而不能发出配对请求。
除了HC-05模块,还有HC-06等双数的从模块蓝牙。其中BT-06/HC-06蓝牙模块均为从体、民用级。
主从一体模块与从模块代表型号
主从一体:HC-03(工业级)、HC-05(民用级)
从机:HC-04(工业级)、HC-06(民用级)
HC-05蓝牙模块使用具体方法
接线:
两个数据口,一个叫RXD(接收),一个叫做TXD(发送)。
蓝牙R与电脑或手机T接
蓝牙T与电脑或手机R接
HC-05电压5v
HC-06电压3.3v
原理:
Pc端数据通过两个蓝牙通信传输,到单片机蓝牙上,该蓝牙通过T端将数据发送给单片机。反之亦然。
方法:
手机:手机下载蓝牙串口助手,配对密码一般为0000/1234
发送指令返回到手机上
电脑:1.蓝牙转串口模块(USB转TTL)
2.蓝牙适配器 利用驱动程序使两个蓝牙配对 较麻烦
程序(控制灯)
int led=4;
void setup()
{
Serial.begin(9600);
}
void loop()
{
while(Serial.available())
{
char c=Serial.read();
if(c=='A')
{
Serial.println("Hello I am amarino");
digitalWrite(led,HIGH);
}
else{digitalWrite(led,LOW);
Serial.println("You idle");
}
}
}
程序(串口监视器)
void setup()
{
Serial.begin(38400);
}
void loop()
{
while(Serial.available())
{
char c=Serial.read();
if(c=='A')
{
Serial.println("Hello I am amarino");
}
}
}
程序(控制电机)
int in1=7;
int in2=8;
int in3=9;
int in4=10;
//上面定义了板上的4个控制端,12一组,34一组
int E1=6;
int E2=5;
//上面定义了PWM引脚
int led=4;
void setup()
{
Serial.begin(9600);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
//下面程序开始时让控制端都为高电平,电机保持不动。
digitalWrite(in1,HIGH);
digitalWrite(in2,HIGH);
}
void loop()
{
while(Serial.available())
{ char c=Serial.read();
if(c=='ahead')
{
Serial.println("Ahead");
_mAhead(in1,in2);
_mAhead(in3,in4);
}
if(c=='back')
{
Serial.println("Back");
_mBack(in1,in2);
_mBack(in3,in4);
}
if(c=='stop')
{
Serial.println("Stop");
_mStop(in1,in2);
_mStop(in3,in4);
}
if(c=='left')
{
Serial.println("DownAhead");
_mLeft(in1,in2);
_mStop(in3,in4);
}
if(c=='right')
{
Serial.println("DownBack");
_mStop(in1,in2);
_mRight(in3,in4);
}
else
{
digitalWrite(led,HIGH);
Serial.println("You idle");
}
}
}
void _mBack(int pin1,int pin2)//后退
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,LOW);
}
void _mAhead(int pin1,int pin2)//前进
{ analogWrite(E1,150);
digitalWrite(pin1,LOW);
digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//紧急制动
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,HIGH);
}
void _mLeft(int pin1,int pin2)//左转
{
digitalWrite(pin1,LOW);
digitalWrite(pin2,HIGH);
}
void _mRight(int pin1,int pin2)// 右转
{
digitalWrite(pin1,LOW);
digitalWrite(pin2,HIGH);
}
void _mSetSpeed(char a, char b)//设定速度
{ analogWrite (E1, a);
analogWrite (E2, b);
}
参考:
http://blog.csdn.net/sjyhehe/article/details/39700575
http://www.ijiandao.com/tech/geek/1100.html