0.png (67.99 KB, 下載次數(shù): 192)
下載附件
2016-6-5 00:37 上傳
包含手機端apk程序還有單片機程序usb驅(qū)動等等很全的資料
所有資料下載:
藍牙模塊資料.zip
(6.59 MB, 下載次數(shù): 60)
2016-5-20 10:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
藍牙模塊的at指令
AT指令集
1 、測試通訊
發(fā)送:AT(返回OK,一秒左右發(fā)一次)
返回:OK
2 、改藍牙串口通訊波特率
發(fā)送:AT+BAUD1
返回:OK1200
發(fā)送:AT+BAUD2
返回:OK2400
……
1---------1200
2---------2400
3---------4800
4---------9600
5---------19200
6---------38400
7---------57600
8---------115200
9---------230400
A---------460800
B---------921600
C---------1382400
不建議用在超過115200的波特率,信號的干擾會使系統(tǒng)不穩(wěn)定。
設(shè)置超過115200后用電腦無法使用,要用單片機編程于高于 115200 才能使用此波特率和
重新發(fā)AT命令設(shè)低波特率
用AT命令設(shè)好波特率后,下次上電使用不需再設(shè),可以掉電保存波特率。
3 、改藍牙名稱
發(fā)送:AT+NAMEname
返回:OKsetname
參數(shù)name:所要設(shè)置的當(dāng)前名稱,即藍牙被搜索到的名稱。20個字符以內(nèi)。
例:發(fā)送AT+NAMEbill_gates
返回OKsetname
這時藍牙名稱改為bill_gates
參數(shù)可以掉電保存,只需修改一次。 PDA 端刷新服務(wù)可以看到更改后的藍牙名稱。
4 、改藍牙配對密碼
發(fā)送:AT+PINxxxx
返回:OKsetpin
參數(shù)xxxx :所要設(shè)置的配對密碼,4 個字節(jié),此命令可用于從機或主機。從機是適配器或手
機彈出要求輸入配對密碼窗口時,手工輸入此參數(shù)就可以連接從機。主藍牙模塊搜索從機后,
如果密碼正確,則會自動配對,主模塊除了可以連接配對從模塊外,其他產(chǎn)品包含從模塊的
時候也可以連接配對,比如含藍牙的數(shù)碼相機,藍牙GPS ,藍牙串口打印機,等等,特別地,
藍牙GPS 為典型例子
例:發(fā)送AT+PIN8888
返回OKsetpin
這時藍牙配對密碼改為8888,模塊在出廠時的默認(rèn)配對密碼是 1234。
參數(shù)可以掉電保存,只需修改一次。
5 、獲取版權(quán)命令: AT+VERSION
返回Linvor 則為正品
0.png (121.48 KB, 下載次數(shù): 171)
下載附件
2016-6-5 00:37 上傳
附錄 1 程序
#include <reg52.h>
#include<math.h>
#include<intrins.h>
#define ucharunsigned char
#define uint unsigned int
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
uchar j,pro;
uchar i;
uchar zhuangtai1 ,zhuangtai2,zhuangtai3;
sbit key1=P2^3;
sbit key2=P2^4;
sbit servor0=P0^0; //舵機控制左右
sbit red0=P0^4; // 右邊紅外接收
sbit red1=P0^2; //左邊紅外接收
sbit red2=P0^3; // 右邊紅外接收2
sbit red3=P0^5; // 左邊紅外接收2
sbit water=P0^7; //水泵
//定義智能小車驅(qū)動模塊輸入IO
sbit IN1 = P1^0;// 高電平1 后退(反轉(zhuǎn))
sbit IN2 = P1^1; // 高電平1 前進(正轉(zhuǎn))
sbit IN3 = P1^2;// 高電平1 前進(正轉(zhuǎn))
sbit IN4 = P1^3; // 高電平1 后退(反轉(zhuǎn))
sbit IN5 = P1^4;// 高電平1 后退(反轉(zhuǎn))
sbit IN6 = P1^5; // 高電平1 前進(正轉(zhuǎn))
sbit IN7 = P1^6;// 高電平1 前進(正轉(zhuǎn))
sbit IN8 = P1^7; // 高電平1 后退(反轉(zhuǎn))
//wifi數(shù)據(jù)定義
uchar Buffer =0; //從串口接收的數(shù)據(jù)
uint URTAReceivedCount=0,n=1;
uchar dataTempdatatable[5],CommandDatatable[5];//數(shù)據(jù)包
uchar serVal[2];
uintpwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; //初始90度,(實際是1382.4,取整得1382)
uchar pwm_flag=0;
uint code ms0_5Con=461; //0.5ms計數(shù) (實際是460.8,取整得461)
uint code ms2_5Con=2304; //2.5ms計數(shù)
bit key_stime_ok;
//延時1ms
void delay_ms(uint i)//1ms延時
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 功能 :前進
***********************************************************************/
void comeon()
{
IN1=0; //左電機
IN2=1;
IN3=1; //右電機
IN4=0;
IN5=0; //左電機
IN6=1;
IN7=1; //右電機
IN8=0;
delay_ms(10);
}
/********************************************************************
* 功能 : 左轉(zhuǎn)
***********************************************************************/
void comeleft()
{
IN1=0; //左電機
IN2=1;
IN3=0; //右電機
IN4=1;
IN5=0; //左電機
IN6=1;
IN7=0; //右電機
IN8=1;
delay_ms(10);
}
/********************************************************************
* 功能 : 右轉(zhuǎn)。
***********************************************************************/
void comeright()
{
IN1=1; //左電機
IN2=0;
IN3=1; //右電機
IN4=0;
IN5=1; //左電機
IN6=0;
IN7=1; //右電機
IN8=0;
delay_ms(10);
}
/********************************************************************
* 功能 : 停止
***********************************************************************/
void stop()
{
IN1=0; //左電機
IN2=0;
IN3=0; //右電機
IN4=0;
IN5=0; //左電機
IN6=0;
IN7=0; //右電機
IN8=0;
delay_ms(10);
}
/********************************************************************
* 功能 : 后退。
***********************************************************************/
void back()
{
IN1=1; //左電機
IN2=0;
IN3=0; //右電機
IN4=1;
IN5=1; //左電機
IN6=0;
IN7=0; //右電機
IN8=1;
delay_ms(10);
}
//自動澆花初始化
void INIT() //初始化
{
TMOD= 0x01; //T/C1采用16位定時器/計數(shù)器
ET0 = 1; //定時器1開中斷
TH0= 0xff;
TL0 = 0xce;
TR0=0;
EA = 1; //CPU開中斷
}
//定時0.1ms
void timer0() interrupt 1
{
EX0=0;
TH0=0xff;
TL0=0xce;
j++;
if(j<=pro)
{
servor0=1;
}
else
{
servor0=0;
}
if(j==400) //周期20ms
{
j=0;
servor0=~servor0;
}
}
//右轉(zhuǎn)90度
voidservorr()
{
TR0=1;
pro=8; //舵機轉(zhuǎn)動到0°
delay_ms(200);
TR0=0;
}
//左轉(zhuǎn)90度
voidservorl()
{
TR0=1;
pro=34; //舵機轉(zhuǎn)動到0°
delay_ms(200);
TR0=0;
}
//轉(zhuǎn)到0度
voidservorc() //0
{
TR0=1;
pro=20; //舵機返回90°方向
delay_ms(200);
}
//循跡
void scanline()
{
P1=0XFF;
if(K3==0||K3==0&&K2==0){comeleft();comeleft();zhuangtai1=1;zhuangtai2=0;zhuangtai3=0;}
//當(dāng)左邊檢測到黑線時則 左轉(zhuǎn) 狀態(tài)1 置1 狀態(tài)2 狀態(tài)3清零
elseif(!K1||!K1&&!K2) { comeright();comeright ();zhuangtai1=0;zhuangtai2=1;zhuangtai3=0;}
//當(dāng)右邊檢測到黑線時則右轉(zhuǎn) 狀態(tài)2 置1 狀態(tài)1 狀態(tài)3清零
elseif(!K2) { comeon();zhuangtai1=0;zhuangtai2=0;zhuangtai3=1; }
else
{ //當(dāng)沒有探頭檢測到黑線時
if(zhuangtai1) {comeleft();} // 狀態(tài)1 則左轉(zhuǎn)
else if(zhuangtai2) {comeright();}//狀態(tài)2 則右轉(zhuǎn)
else if(zhuangtai3) {comeon();} //狀態(tài)3 則前進直走
else{stop();}
}
}
/********************************************************************
* 名稱 : Send_Data()
* 功能 : 向上位機傳送字符
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Send_Data(uchar type,uchar cmd,uchardat)
{
uchar data Buffer[5];//構(gòu)建數(shù)據(jù)包
uchar *p;
uint Send_Count=0;
p= Buffer;
Buffer[0]=0XFF;
Buffer[1]=type;
Buffer[2]=cmd;
Buffer[3]=dat;
Buffer[4]=0XFF;
while(1)
{
if(*p==0XFF)
{
Send_Count++; //0XFF標(biāo)志統(tǒng)計位
}
SBUF = *p; //發(fā)送
while(!TI) //如果發(fā)送完畢,硬件會置位TI,等待發(fā)送完畢
{
_nop_();
}
p++;
TI = 0;
if(Send_Count == 2) //當(dāng)統(tǒng)計到兩次出現(xiàn)0XFF,則認(rèn)為一個數(shù)據(jù)包發(fā)送完畢,跳出循環(huán)
{
TI = 0;
break;
}
}
}
/********************************************************************
協(xié)議規(guī)定:
包頭 類型位 數(shù)據(jù)位 數(shù)據(jù)位 結(jié)束位
0XFF 0X** OX** 0X** 0XFF
各命令說明:
類型位 數(shù)據(jù)位 數(shù)據(jù)位 功能
0X00 0X02 0X00 前進
0X00 0X01 0X00 后退
0X00 0X03 0X00 左轉(zhuǎn)
0X00 0X04 0X00 右轉(zhuǎn)
0X00 0X00 0X00 停止
0X01 0X01 舵機l
0X01 0X02 . 舵機r
0X01 0X03 . 舵機c
0X02 0X01 噴水
0X02 0X02 . 不噴水
***********************************************************************/
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷初始化
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //設(shè)置波特率 9600
TL1 = 0xFd;
TR1 = 1; //啟動定時器1
ES = 1; //開串口中斷
EA = 1; //開總中斷
IT0=0;
EX0=1;
}
// 串口中斷
void Com_Int(void) interrupt 4
{
uchar temp;
ES=0; //關(guān)串口中斷
RI=0; //軟件清除接收中斷
temp=SBUF;
if(temp==0XFF && URTAReceivedCount<3)
{
Tempdatatable[0]=0XFF; //包頭
URTAReceivedCount++;
}
else
{
Tempdatatable[n]=temp;
n++;
if(URTAReceivedCount==0&&n==2)
n=1;
}
if(URTAReceivedCount==2)//包尾
{
Tempdatatable[0]=0XFF;
Tempdatatable[4]=0XFF;
n=1;
URTAReceivedCount=0; //組包完畢
temp=' ';
// Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); //發(fā)送組成的數(shù)據(jù)包回去
}
CommandDatatable[0]=Tempdatatable[0];
CommandDatatable[1]=Tempdatatable[1];
CommandDatatable[2]=Tempdatatable[2];
CommandDatatable[3]=Tempdatatable[3];
CommandDatatable[4]=Tempdatatable[4];
ES=1;//開串口中斷
}
//wifi控制初始化
void Timer0Init()
{
/*0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
/.5 ms初始值 F700,(12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)*/
TMOD|= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH0=-ms2_5Con>>8; //給定初值,17ms中斷
TL0=-ms2_5Con;
EA=1; //總中斷打開
ET0=1; //定時器0中斷打開
TR0=1; //定時器0開關(guān)打開
}
// 自動控制主程序
voidzidong() //自動澆花
{
P0=0X7d;
P1=0X00;
P2=0XFF;
INIT();
servorc();
while(1)
{
//舵機轉(zhuǎn)動澆水
if(red1==0)
{
while(red1==0&&red3==0)
{
stop();
delay_ms(100);
servorl();
delay_ms(100);
water=1;
}
water=0;
delay_ms(200);
servorc();
}
if(red0==0)
{
while(red0==0&&red2==0)
{
stop();
delay_ms(100);
servorr();
delay_ms(100);
water=1;
}
water=0;
delay_ms(200);
servorc();
}
scanline(); //循環(huán)調(diào)用尋線子程序
}
}
// wifi控制主程序
void wifico()
{
delay_ms(50);
water=0;
P1=0X00;
INIT();
Com_Init();//串口初始化
servorc();
while(1)
{
if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)
{
switch (CommandDatatable[1]) //根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容
{
case 0X00: //類型位0X00,表明是控制數(shù)據(jù)包,進入控制數(shù)據(jù)case
switch(CommandDatatable[2]) //根據(jù)數(shù)據(jù)位的值來進行選擇執(zhí)行不同的動作
{
case0X00:stop();break;
case0X01:comeon();break;
case0X02:back();break;
case0X03:comeleft();break;
case0X04:comeright ();break;
default : break;
}
break;
case 0X01: //類型位0X01,表明是舵機數(shù)據(jù)包,進入舵機case
switch(CommandDatatable[2])
{ case 0x01:servorr();break;
case0x02:servorc();break;
case0x03:servorl();break;
default: break;
}
break;
case0X02:
switch(CommandDatatable[2])
{ case 0x01:water=1;break;
case0x02:water=0;break;
default: break;
}
break;
default : break;
}
}
}
}
//主函數(shù)
void main()
{
water=0;
if(key1==0&&key2!=0)zidong();
elseif(key2==0&&key1!=0) wifico();
else
{
water=0;
servorc();
stop();}
}
|