小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

手把手教你做藍(lán)牙小車

 轉(zhuǎn)身點(diǎn)支煙 2016-10-17
前些日子一直在看鴻哥的程序感覺光看也只是紙上談兵,所以想通過做小車的方式深入的體會(huì)一下鴻哥的程序。想學(xué)習(xí)鴻哥的程序的可點(diǎn)擊下面的連接
(連載中...)從業(yè)將近十年!手把手教你單片機(jī)程序框架。廢話少說先上零件圖
小車底盤.jpg
小車底盤
L298N驅(qū)動(dòng).png

電機(jī)驅(qū)動(dòng)
藍(lán)牙模塊.jpg

藍(lán)牙模塊HC-06

鋰電池12V.png
12V鋰電池

PL2303燒寫器.jpg
燒寫器
Screenshot_2014-08-05-22-44-26(1).png

安卓app藍(lán)牙小車

51單片機(jī)最小系統(tǒng).jpg
單片機(jī)最小系統(tǒng)

本來想自己畫板子做模塊的,但是老師給了我一大堆模塊,沒辦法就用老師的模塊吧
嘿嘿


模塊都上了怎么連接?
那我就簡(jiǎn)單的說一下,


電機(jī)驅(qū)動(dòng):8個(gè)控制端接51單片機(jī)P0口,驅(qū)動(dòng)PWM使能端接P2.0-P2.3。
因?yàn)殡姍C(jī)驅(qū)動(dòng)上有5V輸出電壓所以可以恰好給單片機(jī)供電,所以很好的解決了單片機(jī)要與驅(qū)動(dòng)共地的問題。


藍(lán)牙模塊:藍(lán)牙模塊的RXD接單片機(jī)的P3.1,藍(lán)牙模塊的TXD接單片機(jī)的P3.0.藍(lán)牙模塊的電源接單片機(jī)的電源。


哈哈簡(jiǎn)單吧


接下來上源代碼
  1. #include 'reg51.h'



  2. sbit PWM1 = P2^0;//右后輪電機(jī)驅(qū)動(dòng)使能
  3. sbit PWM2 = P2^1;//左后輪電機(jī)驅(qū)動(dòng)使能
  4. sbit PWM3 = P2^2;//右前輪電機(jī)驅(qū)動(dòng)使能
  5. sbit PWM4 = P2^3;//左前輪電機(jī)驅(qū)動(dòng)使能

  6. sbit motor_control_1 = P0^0;//右后輪后退
  7. sbit motor_control_2 = P0^1;//右后輪前進(jìn)
  8. sbit motor_control_3 = P0^2;//左后輪后退
  9. sbit motor_control_4 = P0^3;//左后輪前進(jìn)
  10. sbit motor_control_5 = P0^4;//右前輪后退
  11. sbit motor_control_6 = P0^5;//右前輪前進(jìn)
  12. sbit motor_control_7 = P0^6;//左前輪后退
  13. sbit motor_control_8 = P0^7;//左前輪前進(jìn)
  14. unsigned char ucBluetoothData = 230;//設(shè)置初始速度最大值為255最小為125

  15. unsigned char ucLock = 0;//互斥量,俗稱原子鎖


  16. unsigned int uiPWMCnt1 = 0;
  17. unsigned int uiPWM1 = 230;
  18. unsigned int uiPWMCnt2 = 0;
  19. unsigned int uiPWM2 = 230;
  20. unsigned int uiPWMCnt3 = 0;
  21. unsigned int uiPWM3 = 230;
  22. unsigned int uiPWMCnt4 = 0;
  23. unsigned int uiPWM4 = 230;

  24. unsigned char ucTempPWM;//設(shè)置中間變量



  25. void initial_myself();
  26. void initial_peripheral();
  27. void T0_time();
  28. void usart_service(void);
  29. //void usart_send(unsigned char ucSendData);
  30. void delay_long(unsigned int uiDelayLong);
  31. void go_forward(void);//前進(jìn)
  32. void fall_back(void);//后退
  33. void turn_left(void);//左轉(zhuǎn)
  34. void turn_right(void);//右轉(zhuǎn)
  35. void stop();//剎車

  36. void main()
  37. {
  38.         initial_myself();
  39.         delay_long(100);
  40.         initial_peripheral();
  41.         while(1)
  42.         {
  43.                 usart_service();
  44.                
  45. //                delay_long(500);
  46.                
  47.        
  48.         }

  49. }
  50. //串口服務(wù)函數(shù)
  51. void usart_service()
  52. {
  53.                
  54.                 switch(ucBluetoothData)
  55.                 {
  56.                         case 0x04://前進(jìn)
  57.                                 ucBluetoothData = 0x02;//避免一直觸發(fā)
  58.                                 go_forward();
  59.                                 ucLock = 1;
  60.                                 uiPWM1 = uiPWM2 = uiPWM3 = uiPWM4 = ucTempPWM;
  61.                                 ucLock = 0;
  62.                                 break;
  63.                         case 0x05://左轉(zhuǎn)
  64.                             ucBluetoothData = 0x02;//避免一直觸發(fā)
  65.                                 turn_left();
  66.                                 ucLock = 1;
  67.                                 uiPWM2 = uiPWM4= ucTempPWM / 4;
  68.                                 uiPWM3 =uiPWM1 = ucTempPWM;
  69.                                 ucLock = 0;
  70.                                 break;
  71.                         case 0x06://右轉(zhuǎn)
  72.                                 ucBluetoothData = 0x02;//避免一直觸發(fā)
  73.                                 turn_right();
  74.                                 ucLock = 1;
  75.                                 uiPWM2 = uiPWM4 = ucTempPWM;
  76.                                 uiPWM3 =uiPWM1 = ucTempPWM / 4;
  77.                                 ucLock = 0;
  78.                                 break;
  79.                         case 0x07://后退
  80.                                 ucBluetoothData = 0x02;//避免一直觸發(fā)
  81.                                 fall_back();
  82.                                 ucLock = 1;
  83.                                 uiPWM1 = uiPWM2 = uiPWM3 = uiPWM4 = ucTempPWM;
  84.                                 ucLock = 0;
  85.                                 break;
  86.                         case 0x01:
  87.                                 ucBluetoothData = 0x02;//避免一直觸發(fā)
  88.                                 stop();       
  89.                                 ucLock = 1;
  90.                                 uiPWM1 = uiPWM2 = uiPWM3 = uiPWM4 = ucTempPWM;
  91.                                 ucLock = 0;
  92.                                 break;
  93.                         case 0x00:
  94.                                 ucBluetoothData = 0x02;//避免一直觸發(fā)
  95.                                 stop();
  96.                                 ucLock = 1;
  97.                                 uiPWM1 = uiPWM2 = uiPWM3 = uiPWM4 = ucTempPWM;
  98.                                 ucLock = 0;
  99.                                 break;
  100.                         default :
  101.                                 break;
  102.        
  103.                 }
  104.                 delay_long(100);
  105. //                usart_send(ucBluetoothData);
  106.                 //速度調(diào)節(jié)的數(shù)據(jù)
  107.                 if(ucBluetoothData!=0x00&&ucBluetoothData!=0x01 && ucBluetoothData!=0x02 &&  ucBluetoothData!=0x04 && ucBluetoothData!=0x05 && ucBluetoothData!=0x06 && ucBluetoothData!=0x07)
  108.                 {
  109.                         ucLock = 1;
  110.                         ucTempPWM = uiPWM1 = uiPWM2 = uiPWM3 = uiPWM4 = ucBluetoothData;
  111.                         ucLock = 0;
  112.                 }

  113. }
  114. void T0_time() interrupt 1
  115. {
  116.         TF0 = 0;//清除中斷標(biāo)志
  117.         TR0 = 0;//關(guān)定時(shí)器
  118.         uiPWMCnt1 ++;
  119.         uiPWMCnt2 ++;
  120.         uiPWMCnt3 ++;
  121.         uiPWMCnt4 ++;
  122.         if(ucLock == 0)
  123.         {
  124.                 if(uiPWMCnt1 > 255)
  125.                 {
  126.                         uiPWMCnt1 = 0;
  127.                 }
  128.                 if(uiPWMCnt1 <>
  129.                 {
  130.                         PWM1 = 1;
  131.                        
  132.                 }
  133.                 else
  134.                 {
  135.                         PWM1 = 0;
  136.                 }
  137.        
  138.                 if(uiPWMCnt2 > 255)
  139.                 {
  140.                         uiPWMCnt2 = 0;
  141.                 }
  142.                 if(uiPWMCnt2 <>
  143.                 {
  144.                         PWM2 = 1;
  145.                        
  146.                 }
  147.                 else
  148.                 {
  149.                         PWM2 = 0;
  150.                 }
  151.        
  152.                 if(uiPWMCnt3 > 255)
  153.                 {
  154.                         uiPWMCnt3 = 0;
  155.                 }
  156.                 if(uiPWMCnt3 <>
  157.                 {
  158.                         PWM3 = 1;
  159.                        
  160.                 }
  161.                 else
  162.                 {
  163.                         PWM3 = 0;
  164.                 }
  165.        
  166.                 if(uiPWMCnt4 > 255)
  167.                 {
  168.                         uiPWMCnt4 = 0;
  169.                 }
  170.                 if(uiPWMCnt4 <>
  171.                 {
  172.                         PWM4 = 1;
  173.                        
  174.                 }
  175.                 else
  176.                 {
  177.                         PWM4 = 0;
  178.                 }
  179.        
  180.        
  181.         }

  182.         TH0 = 0xff;
  183.         TL0 = 0x28;
  184.         TR0 = 1;///開定時(shí)器

  185. }

  186. void initial_myself()
  187. {
  188.         TMOD = 0x01;//設(shè)置定時(shí)器0為工作方式1
  189.         TH0 = 0xff;
  190.         TL0 = 0x28;

  191.         //配置串口
  192.         SCON = 0x50;
  193.         TMOD = 0x21;
  194.         TH1 = TL1 = -(11095200L/12/32/9600);
  195.         IP = 0x10;
  196.         stop();
  197.         PWM1 = 1;
  198.         PWM2 = 1;
  199.         PWM3 = 1;
  200.         PWM4 = 1;

  201. }

  202. void initial_peripheral()
  203. {
  204.         EA = 1;//開總中斷
  205.         ES = 1;//允許串口中斷
  206.         ET0 = 1;//允許定時(shí)器中斷
  207.         TR0 = 1;//啟動(dòng)定時(shí)器
  208.         TR1 = 1;//
  209. }
  210. void usart_receive(void) interrupt 4
  211. {

  212.         if(RI == 1)
  213.         {
  214.                 RI = 0;
  215.                 ucBluetoothData = SBUF;
  216. //                uiSendCnt = 0;
  217.         }

  218.         else
  219.         {
  220.                 TI = 0;
  221.         }

  222. }
  223. //void usart_send(unsigned char ucSendData)
  224. //{
  225. //        ES = 0;
  226. //        TI = 0;
  227. //        SBUF = ucSendData;
  228. //        TI = 0;
  229. //        ES = 1;
  230. //
  231. //}
  232. void delay_long(unsigned int uiDelayLong)
  233. {
  234.         unsigned int i;
  235.         unsigned int j;
  236.         for(i = 0 ; i < uidelaylong="" ;="">
  237.         {
  238.                 for(j = 0; j < 500;="">
  239.        
  240.         }

  241. }
  242. void stop()//停止
  243. {
  244.         motor_control_1 = 0;
  245.         motor_control_2 = 0;
  246.         motor_control_3 = 0;
  247.         motor_control_4 = 0;
  248.         motor_control_5 = 0;
  249.         motor_control_6 = 0;
  250.         motor_control_7 = 0;
  251.         motor_control_8 = 0;
  252. }
  253. void fall_back()
  254. {
  255.         motor_control_1 = 1;
  256.         motor_control_2 = 0;
  257.         motor_control_3 = 1;
  258.         motor_control_4 = 0;
  259.         motor_control_5 = 1;
  260.         motor_control_6 = 0;
  261.         motor_control_7 = 1;
  262.         motor_control_8 = 0;
  263. }
  264. void go_forward()
  265. {
  266.         motor_control_1 = 0;
  267.         motor_control_2 = 1;
  268.         motor_control_3 = 0;
  269.         motor_control_4 = 1;
  270.         motor_control_5 = 0;
  271.         motor_control_6 = 1;
  272.         motor_control_7 = 0;
  273.         motor_control_8 = 1;
  274. }
  275. void turn_left()//左轉(zhuǎn)
  276. {
  277.         motor_control_1 = 0;
  278.         motor_control_2 = 1;
  279.         motor_control_3 = 0;
  280.         motor_control_4 = 1;
  281.         motor_control_5 = 0;
  282.         motor_control_6 = 1;
  283.         motor_control_7 = 0;
  284.         motor_control_8 = 1;
  285.        
  286. }
  287. void turn_right()//右轉(zhuǎn)
  288. {
  289.         motor_control_1 = 0;
  290.         motor_control_2 = 1;
  291.         motor_control_3 = 0;
  292.         motor_control_4 = 1;
  293.         motor_control_5 = 0;
  294.         motor_control_6 = 1;
  295.         motor_control_7 = 0;
  296.         motor_control_8 = 1;
  297. }
哈哈看著是不是似曾相識(shí)的趕腳


接下來上軟件

Screenshot_2014-08-05-22-44-26.png

Screenshot_2014-08-07-09-16-56(1).png
連接上皆可以玩了
密碼是1234哦。
軟件在這里:http://pan.baidu.com/s/1eQnEHoA


以上只是安裝過程。

細(xì)心的朋友會(huì)發(fā)現(xiàn)這個(gè)軟件發(fā)出來的數(shù)據(jù)怎么得到的呢?
接下來教大家怎么獲得手機(jī)發(fā)出來的數(shù)據(jù):
IMG_20140807_092700.jpg

PL2303燒寫器和藍(lán)牙相連,
接法和單片機(jī)相連的接法一樣。
TXD-RXD
RXD-TXD
注意電源別接反哦??!如果不行就再反過來接??!總有一個(gè)順序可以
沒有PL2303也可以用學(xué)習(xí)板哦!!

串口助手.png
看看眼熟不燒寫軟件上面有串口助手哦!功能強(qiáng)大吧?。?!
打開串口
配置如上
端口怎么找????這個(gè)就不要問了嘛???
右鍵計(jì)算機(jī)-設(shè)備管理器-端口


手機(jī)連接上藍(lán)牙發(fā)數(shù)據(jù),數(shù)據(jù)出來了吧!!

哈哈就這么簡(jiǎn)單?。?!

曬張總圖
IMG_20140806_235143.jpg



玩小車去嘍!??!



小結(jié):之前做過小車本以為做個(gè)藍(lán)牙小車手到擒來,但是還是遇到了幾個(gè)問題
1.一開始不知道最小系統(tǒng)的晶振是12Mhz的導(dǎo)致系統(tǒng)不正常,所以一定要使用11。0592的晶振呀!
2.調(diào)小車輪子轉(zhuǎn)動(dòng)的方向一定要一個(gè)一個(gè)調(diào),切記!切記!
3.最后就是程序,調(diào)的時(shí)候一個(gè)功能一個(gè)功能的實(shí)現(xiàn),沒有一下子都把程序?qū)懗鰜淼?,因?yàn)樯婕暗酱?,有必要還要編寫一個(gè)發(fā)送串口數(shù)據(jù)的子函數(shù),這樣在電腦上可以隨時(shí)看到你發(fā)送的數(shù)據(jù)!

后續(xù)還有小車pid算法,尋光,循跡的研究希望大家繼續(xù)關(guān)注??!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多