久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7676|回復: 3
打印 上一主題 下一主題
收起左側

藍牙遙控51單片機智能小車源碼(APP,通信協議等資料分享)

  [復制鏈接]
跳轉到指定樓層
樓主
附件中有藍牙遙控51單片機智能小車的程序,藍牙APK,通信協議等


51智能小車藍牙遙控通訊協議
協議格式如下:
$0,0,0,0,0,0,0,0,0,0,0,100,4200#

1、上下左右停止(對應協議中的第1
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:direction
{up(1)down(2)left(3)right(4)stop(0)}

2、左旋轉、右旋轉(對應協議中的第3(自定義1)
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:revolve
{turn_left(1)turn_right(2)}

3、鳴笛(對應協議中的第5(自定義3)
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:whistle
{truefalse}

4、加速(對應協議中的第7(自定義5)
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:expedite
{truefalse}

5、減速(對應協議中的第9(自定義6)
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:reduce
{truefalse}

6、點燈(自鎖)(對應協議中的第17(自定義2)
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:light
{truefalse}1,0

7、滅火(自鎖)(對應協議中的第19(自定義8)
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:outfire
{truefalse}1,0

8、超聲波(對應協議中的第23
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:ultrasonic
{100.8}   cm

9、電池電壓(對應協議中的第25
舉例:$0,0,0,0,0,0,0,0,0,0,0,100,4200#
變量:voltage
{4.2}   v




單片機源程序如下:
  1. /**********************亞博智能小車黑線循跡例程************************
  2. *  平臺:BST-V51  + Keil uVision3 + STC89C52RC
  3. *  名稱:智能小車例程
  4. *  公司:深圳亞博智
  5. *  編寫:羅工
  6. *  晶振:11.0592MHZ
  7. *  說明:免費開源,不提供源代碼分析,有問題直接到交流群交流
  8. *  硬件設置:要有自己動手能力,進行組裝接線和傳感器靈敏度的調試,才能完成實驗
  9. *  使用說明:根據下面IO口自己用杜邦線連接各種模塊,可以自己修改各種模塊IO口
  10. ******************************************************************/
  11. //按下K4按鍵,1秒左右啟電小車
  12. //按下復位健可以停止小車        

  13. #include "reg52.h"             //包含52系統頭文件
  14. #include <string.h>
  15. #include "bst_car.h"         //包含bst_car.h智能小車頭文件

  16. unsigned char pwm_val_left  =0;//變量定義
  17. unsigned char pwm_val_right =0;
  18. unsigned char push_val_left ;// 左電機占空比N/20 //速度調節變量 0-20。。。0最小,20最大
  19. unsigned char push_val_right ;// 右電機占空比N/20
  20.                                                            // 大家可以根據循跡效果修改以上兩個數值
  21. bit Right_PWM_ON=1;                   //右電機PWM開關
  22. bit Left_PWM_ON =1;                           //左電機PWM開關

  23. bit startBit = 0;                                  //串口接收開始標志位
  24. bit newLineReceived = 0;                 //串口一幀協議包接收完成

  25. unsigned char control=0X03;                //車運動控制全局變量
  26. unsigned char inputString[50];  //接收數據協議

  27. long int distance = 0;               //距離變量
  28. unsigned int timeH, timeL;
  29. unsigned char succeed_flag;

  30. /*小車運行狀態枚舉*/
  31. enum{
  32.   enSTOP = 0,
  33.   enRUN,
  34.   enBACK,
  35.   enLEFT,
  36.   enRIGHT
  37. }enCarState;

  38. #define         enMinMin()         {push_val_left =20;push_val_right =20;}
  39. #define         enMin()                 {push_val_left =24;push_val_right =24;}
  40. #define         enMidle()        {push_val_left =28;push_val_right =28;}
  41. #define                enMax()                 {push_val_left =32;push_val_right =32;}
  42. #define         run_car     '1'//按鍵前
  43. #define         back_car    '2'//按鍵后
  44. #define         left_car    '3'//按鍵左
  45. #define         right_car   '4'//按鍵右
  46. #define         stop_car    '0'//按鍵停

  47. int g_volume = 0;
  48. int g_carstate = 0;
  49. char returntemp[] = "$0,0,0,0,0,0,0,0,0,0,0,0000cm,8.2V#";





  50. //延時函數        
  51. void delay(unsigned int xms)                                
  52. {
  53.     unsigned int i,j;
  54.         for(i=xms;i>0;i--)                      //i=xms即延時約xms毫秒
  55.     for(j=112;j>0;j--);
  56. }
  57. /******************************************************************************/
  58. /* 函數名稱  : delayt                                                         */
  59. /* 函數描述  : 延時函數                                                       */
  60. /* 輸入參數  : x                                                              */
  61. /* 參數描述  : 延時時間數據                                                   */
  62. /* 返回值    : 無                                                             */
  63. /******************************************************************************/        
  64. void delayt(unsigned int x)
  65. {
  66.     unsigned char j;
  67.     while(x-- > 0)
  68.     {
  69.               for(j = 0;j < 125;j++)
  70.         {
  71.             ;
  72.         }
  73.     }
  74. }

  75. /******************************************************************************/
  76. /* 函數名稱  : Trig_SuperSonic                                                */
  77. /* 函數描述  : 發出聲波函數                                                   */
  78. /* 輸入參數  : 無                                                             */
  79. /* 參數描述  : 無                                                             */
  80. /* 返回值    : 無                                                             */
  81. /******************************************************************************/
  82. void Trig_SuperSonic(void)//發出聲波
  83. {
  84.          OUTPUT = 1;
  85.          delayt(1);
  86.          OUTPUT = 0;
  87. }
  88. /******************************************************************************/
  89. /* 函數名稱  : Measure_Distance                                               */
  90. /* 函數描述  : 計算距離函數                                                   */
  91. /* 輸入參數  : 無                                                             */
  92. /* 參數描述  : 無                                                             */
  93. /* 返回值    : 無                                                             */
  94. /******************************************************************************/
  95. long Measure_Distance(void)
  96. {
  97.         unsigned int  time;
  98.         OUTPUT = 0;
  99.     EA = 1;
  100.         T2MOD = 0X00;
  101.         T2CON = 0x00; //定時器12位工作模式         自動重裝
  102.         while(1)
  103.         {
  104.                 EA = 0;
  105.                 Trig_SuperSonic();
  106.                 while(INPUT == 0);
  107.                 succeed_flag = 0;
  108.                 EA = 1;
  109.                 EX0 = 1;
  110.                 TH2 = 0;
  111.                 TL2 = 0;
  112.                 TR2 = 1;  //開啟定時器
  113.                 delayt(10);
  114.                 TR2 = 0;
  115.                 EX0 = 0;
  116.                 if(succeed_flag == 1)
  117.                 {
  118.                         time = timeH*256 + timeL;
  119.                         distance = time*0.0172;
  120.                         return distance;
  121.                 }
  122.                 else
  123.                 {
  124.                         distance = 0;

  125.                 }

  126.         }
  127. }

  128. //前進
  129. void run(void)
  130. {
  131.     //push_val_left=5;         //速度調節變量 0-20。。。0最小,20最大
  132.         //push_val_right=5;
  133.         Left_moto_go ;   //左電機往前走
  134.         Right_moto_go ;  //右電機往前走
  135. }

  136. //左轉
  137. void leftrun(void)
  138. {         
  139.      //push_val_left=5;
  140.          //push_val_right=5;
  141.          Right_moto_go ;  //右電機往前走
  142.      Left_moto_Stop ;  //左電機停止
  143. //         delay(100);
  144. //         Right_moto_Stop;                //微信打開注釋
  145. //         delay(100);

  146. }

  147. //右轉
  148. void  rightrun(void)
  149. {
  150.          //push_val_left=5;
  151.          //push_val_right=5;
  152.      Left_moto_go  ;   //左電機往前走
  153.          Right_moto_Stop   ;  //右電機往前走
  154. //         delay(100);
  155. //         Left_moto_Stop;         //微信打開注釋
  156. //         delay(100);
  157.         
  158. }

  159. //后退
  160. void back(void)
  161. {

  162.    Left_moto_back  ;  // 左輪后退
  163.    Right_moto_back  ;  // 左輪后退
  164. }

  165. //停轉
  166. void stop(void)
  167. {
  168.   Right_moto_Stop  ;   //停轉
  169.   Left_moto_Stop   ;   //
  170. }


  171. //左旋轉
  172. void tleft(void)
  173. {
  174.   Left_moto_go  ;   //左電機往前走
  175.   Right_moto_back  ;  // 左輪后退
  176. }

  177. //右旋轉
  178. void tright(void)
  179. {
  180.   Left_moto_back  ;   //左電機往前走
  181.   Right_moto_go ;  // 左輪后退
  182. }




  183. /************************************************************************/
  184. //                   PWM調制電機轉速                                   

  185. //                   左電機調速                                       
  186. /*調節push_val_left的值改變電機轉速,占空比*/
  187. void pwm_out_left_moto(void)
  188. {  
  189.      if(Left_PWM_ON)
  190.      {
  191.           if(pwm_val_left<=push_val_left)
  192.               {
  193.                    EN1=1;
  194.               }
  195.               else
  196.               {
  197.                    EN1=0;
  198.           }
  199.           if(pwm_val_left>=32)
  200.               pwm_val_left=0;
  201.      }
  202.      else   
  203.      {
  204.           EN1=0;   //若未開啟PWM則EN1=0 左電機 停止
  205.      }
  206. }
  207. /******************************************************************/
  208. /*                    右電機調速                                  */  
  209. void pwm_out_right_moto(void)
  210. {
  211.     if(Right_PWM_ON)
  212.     {
  213.         if(pwm_val_right<=push_val_right)        //20ms內電平信號 111 111 0000 0000 0000 00
  214.             {
  215.                 EN2=1;                                                         //占空比6:20
  216.         }
  217.             else
  218.             {
  219.                 EN2=0;
  220.         }
  221.             if(pwm_val_right>=32)
  222.             pwm_val_right=0;
  223.     }
  224.     else   
  225.     {
  226.         EN2=0;          //若未開啟PWM則EN2=0 右電機 停止
  227.     }
  228. }
  229.       
  230.       
  231. //TIMER0中斷服務子函數產生PWM信號
  232. void timer0()interrupt 1 using 2
  233. {
  234.      TH0=0XFC;          //1Ms定時
  235.          TL0=0X66;
  236.          pwm_val_left++;
  237.          pwm_val_right++;
  238.          pwm_out_left_moto();
  239.          pwm_out_right_moto();
  240. }        
  241. void exit0() interrupt 0  // 外部中斷0  超聲波接收
  242. {
  243.         timeH = TH2;
  244.         timeL = TL2;
  245.         succeed_flag = 1;
  246.         EX0 = 0;
  247. }

  248. void timer2()  interrupt 5         //定時器2
  249. {
  250.          TF2 = 0;
  251.      TH2 = 0;          //1Ms定時
  252.          TL2 = 0;
  253. }
  254. /******************************************************************/
  255. /* 串口中斷程序*/
  256. /******************************************************************/

  257. void UART_SER () interrupt 4
  258. {
  259.         unsigned char n;         //定義臨時變量
  260.         static int num = 0;

  261.         if(RI)                 //判斷是接收中斷產生
  262.         {
  263.                 RI = 0;         //標志位清零
  264.                 n = SBUF; //讀入緩沖區的值

  265.                 //control=n;


  266. )
  267.             {
  268.               startBit = 1;
  269.                   num = 0;
  270.             }
  271.             if(startBit == 1)
  272.             {
  273.                inputString[num] = n;     
  274.             }  
  275.             if (n == '#')
  276.             {
  277.                newLineReceived = 1;
  278.                startBit = 0;
  279.             }
  280.                 num++;
  281.                 if(num >= 50)
  282.                 {
  283.                         num = 0;
  284.                         startBit = 0;
  285.                         newLineReceived        = 0;
  286.                 }
  287.         }

  288. }


  289. //pwm初始化
  290. void pwmint(void)
  291. {
  292.         TMOD=0X01;
  293.         TH0= 0XFC;  //1ms定時
  294.     TL0= 0X66;
  295.         TR0= 1;
  296.         ET0= 1;
  297.         EA = 1;            //開總中斷

  298. }

  299. //WIFI、藍牙初始化
  300. void WifiInit(void)
  301. {
  302.    
  303.            SCON = 0x50;         // SCON: 模式1, 8-bit UART, 使能接收
  304.         TMOD |= 0x20;
  305.         TH1=0xfd;                 //波特率9600 初值
  306.         TL1=0xfd;
  307.         TR1= 1;
  308.         EA = 1;                    //開總中斷
  309.         ES= 1;                         //打開串口中斷


  310. }
  311. //串口發送函數
  312. void PutString(unsigned char *TXStr)  
  313. {               
  314.         ES=0;     
  315.         while(*TXStr!=0)
  316.         {                     
  317.           SBUF=*TXStr;
  318.           while(TI==0);
  319.           TI=0;   
  320.           TXStr++;
  321.         }
  322.         ES=1;
  323. }     
  324. //主函數
  325. void main(void)
  326. {        
  327.     P0 = 0X00;    //關電機        
  328.         P1 = 0xff;           //關閉所有LED和風扇
  329.         FIRE = 0;

  330.     pwmint();
  331.         WifiInit();

  332.         while(1)        //無限循環
  333.         {
  334.                  
  335.                  distance = Measure_Distance();        //計算脈寬并轉換為距離
  336.                  

  337.                 if (newLineReceived)
  338.                    {
  339.                         switch(inputString[1])
  340.                         {
  341.                                 case run_car:   g_carstate = enRUN; break;
  342.                                 case back_car:  g_carstate = enBACK;break;
  343.                                 case left_car:  g_carstate = enLEFT;break;
  344.                                 case right_car: g_carstate = enRIGHT;break;
  345.                                 case stop_car:  g_carstate = enSTOP;break;
  346.                                 default:g_carstate = enSTOP;break;
  347.                         }
  348.                         if(inputString[3] == '1')  //左旋轉
  349.                         {
  350.                                 TR0= 1;
  351.                                 tleft();
  352.                                 delay(2000);//延時2s
  353.                                 stop();
  354.                                 TR0= 0;
  355.                         }
  356.                         else if(inputString[3] == '2')        // 右旋轉
  357.                         {
  358.                                    TR0= 1;
  359.                                 tright();
  360.                                 delay(2000);//延時2s
  361.                                 stop();
  362.                                 TR0= 0;
  363.                         }
  364.                         if(inputString[5] == '1')  //鳴笛
  365.                         {
  366.                                 FM = 0;
  367.                                 delay(1000);
  368.                                 FM = 1;
  369.                         }
  370.                         if(inputString[7] == '1')  //加速
  371.                         {
  372.                                 g_volume++;
  373.                                 if(g_volume>=4)
  374.                                 {
  375.                                         g_volume = 4;
  376.                                 }
  377.                         }
  378.                         if(inputString[9] == '1')  //減速
  379.                         {
  380.                                 g_volume--;
  381.                                 if(g_volume<=0)
  382.                                 {
  383.                                         g_volume = 1;
  384.                                 }
  385.                         }   
  386.                         if(inputString[17] == '1')  //點燈
  387.                         {
  388.                                 LED = (LED == 1)?0:1;  //反轉電平
  389.                                 delay(200);//延時2s
  390.                                 LED = (LED == 1)?0:1;  //反轉電平
  391.                                 delay(200);//延時2s
  392.                                 LED = (LED == 1)?0:1;  //反轉電平
  393.                                 delay(200);//延時2s
  394.                                 LED = (LED == 1)?0:1;  //反轉電平
  395.                                 delay(200);//延時2s
  396.                                 LED = (LED == 1)?0:1;  //反轉電平
  397.                                 delay(200);//延時2s
  398.                                 LED = (LED == 1)?0:1;  //反轉電平
  399.                                 delay(200);//延時2s
  400.                                 LED = (LED == 1)?0:1;  //反轉電平
  401.                                 delay(200);//延時2s
  402.                                 LED = (LED == 1)?0:1;  //反轉電平
  403.                                 delay(200);//延時2s
  404.                         }
  405.                         
  406.                         if(inputString[19] == '1')  //滅火
  407.                         {
  408.                                 FIRE = (FIRE == 1)?0:1;
  409.                         }        
  410.               
  411.                //返回狀態
  412.                    //組裝超聲波數據
  413.                         returntemp[23] = (distance / 1000) + 0x30;
  414.                         returntemp[24] = (distance / 100 % 10) + 0x30;
  415.                         returntemp[25] = (distance / 10 % 10) + 0x30;
  416.                         returntemp[26] = (distance % 10 ) + 0x30;


  417.                PutString(returntemp); //返回協議數據包      
  418.                
  419.                newLineReceived = 0;  
  420.                    memset(inputString, 0x00, sizeof(inputString));  
  421.          
  422.             }
  423.    
  424. ……………………

  425. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼



所有資料51hei提供下載:

51智能小車藍牙遙控.zip (4.39 MB, 下載次數: 142)


評分

參與人數 1黑幣 +60 收起 理由
admin + 60

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:330023 發表于 2018-6-12 20:04 | 只看該作者
emmmm  哪位大佬可以把資料發我一份嗎??
回復

使用道具 舉報

板凳
ID:429154 發表于 2018-12-11 11:28 | 只看該作者
不是apk的源碼,下載了好像沒有用
回復

使用道具 舉報

地板
ID:633514 發表于 2019-10-31 21:09 | 只看該作者
luvivin 發表于 2018-12-11 11:28
不是apk的源碼,下載了好像沒有用

不太會做,下載來看一看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一区二区三区 | 美女黄色在线观看 | 亚洲成人免费在线观看 | 欧美一区二区三区在线 | 国产一区二区三区在线 | 久久久婷婷 | 一级女毛片 | 久久成人国产精品 | 午夜影院视频 | 亚洲视频在线观看 | 久国产视频 | 国产精品一区二区三区免费观看 | 99久久精品国产一区二区三区 | 五月天天丁香婷婷在线中 | 在线观看第一区 | 久热爱 | 亚洲精品一| 久久日韩精品 | 国产99视频精品免视看9 | 精品成人69xx.xyz | 青青草一区| 中文字幕精品一区久久久久 | 欧美高清视频在线观看 | 国产一区二区三区在线 | 91在线精品一区二区 | 欧美日韩视频在线 | www.日本在线观看 | 精品国产乱码一区二区三区a | 夜夜爽99久久国产综合精品女不卡 | 视频精品一区 | 色婷婷av一区二区三区软件 | 午夜资源 | 欧美精品福利视频 | 欧美最猛黑人xxxx黑人 | 久久国内精品 | 亚洲福利一区二区 | 国产成人在线看 | 亚洲欧美日韩成人在线 | 一级全黄视频 | 日本高清中文字幕 | 亚洲三区在线播放 |