找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6682|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32循跡+藍(lán)牙小車(chē)制作(附源碼)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:393605 發(fā)表于 2018-12-12 22:32 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在做小車(chē)之前,首先應(yīng)該明確需要的器件,其次劃分功能模塊,一個(gè)模塊一個(gè)模塊的來(lái),在完成一個(gè)模塊之后添加另一個(gè)能保證最終小車(chē)的穩(wěn)定功能實(shí)現(xiàn)。有兩種思路:一,以實(shí)現(xiàn)功能為主,不考慮后期要加什么東西,實(shí)現(xiàn)以后再做優(yōu)化。二,先將項(xiàng)目整體需要做的東西全部過(guò)一遍,再一步步做出成品。我是第一種,在搭建的過(guò)程中也遇到了一些問(wèn)題,如:我把電機(jī)弄好以后,咦,驅(qū)動(dòng)放哪?我把驅(qū)動(dòng)固定在板上以后,呀,洞洞板這面有可能使驅(qū)動(dòng)引腳導(dǎo)電,等各種問(wèn)題。所以具體采用哪種思路還需要根據(jù)實(shí)際情況來(lái)看。功能模塊

從一個(gè)流水燈開(kāi)始,依次加入電機(jī)、PWM、紅外、藍(lán)牙,完成最終調(diào)試。

實(shí)物圖



代碼需要注意的問(wèn)題:電機(jī)與驅(qū)動(dòng)的接線及代碼中GPIO口的初始化要能對(duì)應(yīng)上,具體怎么接具體測(cè)試。

  1. #include "sys.h"
  2. #include "usart.h"        
  3. #include "delay.h"        
  4. #include "led.h"
  5. #include "key.h"
  6. #include "motor.h"
  7. #include "detector.h"
  8. #include "usart2.h"
  9. #include "hc05.h"
  10. #include "string.h"
  11. void xunji(void);
  12. int main(void)
  13. {        
  14.         u8 sendbuf[20];         
  15.         u8 reclen=0;  
  16.         
  17.         Stm32_Clock_Init(9);
  18.         delay_init(72);
  19.         
  20.         LED_Init();
  21.         KEY_Init();
  22.         PWM_Init(899,0);//pwm頻率=72000/(899+1)=80Khz ??why先不管
  23.         detectorInit();
  24.         
  25.         uart_init(72,9600);         //串口1初始化為9600
  26.         HC05_Init();        //初始化ATK-HC05模塊  
  27.         
  28.         while(1){
  29.                
  30.                 if(USART2_RX_STA&0X8000)                        //接收到一次數(shù)據(jù)了
  31.                 {               
  32.                          reclen=USART2_RX_STA&0X7FFF;        //得到數(shù)據(jù)長(zhǎng)度
  33.                           USART2_RX_BUF[reclen]=0;                 //加入結(jié)束符
  34.                         
  35.                         if(strcmp((const char*)USART2_RX_BUF,"X")==0){
  36.                                 xunji();
  37.                         }
  38.                         if(strcmp((const char*)USART2_RX_BUF,"F")==0)
  39.                         {        LED1=~LED1;
  40.                                 carStraight(450,899);
  41.                                 
  42.                         }
  43.                         if(strcmp((const char*)USART2_RX_BUF,"B")==0)
  44.                         {        LED1=~LED1;
  45.                                 carBack(500,899);
  46.                         }
  47.                         if(strcmp((const char*)USART2_RX_BUF,"L")==0)
  48.                         {        
  49.                                 LED1=~LED1;        //打開(kāi)LED1
  50.                                 carLeft(300,899);
  51.                         }
  52.                         if(strcmp((const char*)USART2_RX_BUF,"R")==0)
  53.                         {        LED1=~LED1;
  54.                                 carRight(400,300);
  55.                         }
  56.                         if(strcmp((const char*)USART2_RX_BUF,"S")==0)
  57.                         {        LED1=~LED1;
  58.                                 carStop();
  59.                         }
  60.                          USART2_RX_STA=0;         
  61.                 }                                                                                                                                                                        
  62.         }
  63. }
  64. /*循跡代碼
  65. */
  66. void xunji(){
  67.         
  68.         u8 sendbuf[20];         
  69.         u8 reclen=0;  
  70.         while(1){
  71.                
  72.                 if(USART2_RX_STA&0X8000)                        //接收到一次數(shù)據(jù)了
  73.                         {               
  74.                                 reclen=USART2_RX_STA&0X7FFF;        //得到數(shù)據(jù)長(zhǎng)度
  75.                                 USART2_RX_BUF[reclen]=0;                 //加入結(jié)束符
  76.                                 
  77.                                 if(strcmp((const char*)USART2_RX_BUF,"O")==0){
  78.                                         //xunji();
  79.                                         break;
  80.                                 }
  81.                                 USART2_RX_STA=0;         
  82.                 }         
  83.                 //如果左邊檢測(cè)到黑線
  84.                 //有黑線是高電平
  85.                 if(LEFT_DETECTOR == 1 && RIGHT_DETECTOR == 0){
  86.                         carLeft(100,899);
  87.                         delay_ms(500);
  88.                         //右邊檢測(cè)到黑線
  89.                 }else if(RIGHT_DETECTOR == 1 && LEFT_DETECTOR == 0){
  90.                         carRight(600,300);
  91.                         delay_ms(500);
  92.                 }else{
  93.                         carStraight(400,600);
  94.                 }
  95.         }        
  96. }
復(fù)制代碼

全部資料51hei下載地址:
BlueTooth-and-detector-Car-master.zip (180.29 KB, 下載次數(shù): 83)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:445480 發(fā)表于 2018-12-13 11:05 | 只看該作者
這個(gè)可以有
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表