找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32顏色識別循跡代碼 STM32四驅(qū)車運(yùn)動(dòng)庫函數(shù)版本

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:640768 發(fā)表于 2021-8-6 10:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. /**
  2. * @par Copyright (C): 2010-2019, Shenzhen Yahboom Tech
  3. * @file         main.c       
  4. * @author       liusen
  5. * @version      V1.0
  6. * @date         2017.07.17
  7. * @brief        主函數(shù)
  8. * @details      
  9. * @par History  
  10. *                 
  11. * version:                liusen_20170717
  12. */
  13. //本實(shí)驗(yàn)對環(huán)境的要求較高,需要用戶自行調(diào)整循跡模塊的靈敏度
  14. //灰度傳感器在不同的光照條件下對不同的顏色有不同的數(shù)值
  15. #include "stm32f10x.h"
  16. #include "app_motor.h"
  17. #include "app_ultrasonic.h"
  18. #include "bsp.h"
  19. #include "sys.h"
  20. #include "delay.h"
  21. #include "app_buzzer.h"
  22. #include "bsp_linewalking.h"
  23. #include "bsp_colorful.h"


  24. #define LOW         (0)
  25. #define HIGH         (1)
  26. //第二位 1:左90 ; 2: 右90; 3: 180度掉頭  4:直行
  27. //這里可以自定義路徑規(guī)劃, 小車放置在起始位置深圳, 根據(jù)下一個(gè)十字或者丁字路口來寫 如上行注釋來左轉(zhuǎn) 、右轉(zhuǎn) 、直行 、掉頭。
  28. char mapLocation[38][2] = {
  29.   {0, 2},  {1, 1},  {2, 2}, {3, 3},
  30.   {4, 2},  {5, 4},  {6, 3},
  31.   {7, 2},  {8, 2},  {9, 2}, {10, 3},
  32.   {11, 4}, {12, 4}, {13, 3},
  33.   {14, 2}, {15, 1}, {16, 1}, {17, 3},
  34.   {18, 2}, {19, 1}, {20, 3},
  35.   {21, 1}, {22, 1}, {23, 1}, {24, 2}, {25, 3},
  36.   {26, 2}, {27, 2}, {28, 3},
  37.   {29, 2}, {30, 2}, {31, 3},
  38.   {32, 2}, {33, 1}, {34, 3},
  39.   {35, 1}, {36, 2}, {37, 3}
  40. };
  41. int position = 0; //位置定義

  42. /**
  43. * Function       Color_Dis
  44. * @author        liusen
  45. * @date          2017.08.15   
  46. * @brief         顏色設(shè)置根據(jù)實(shí)際情況采集數(shù)據(jù)顯示
  47. * @param[in]     v_ad : 采集顏色AD
  48. * @param[out]    void
  49. * @retval        void
  50. * @par History   無
  51. */

  52. void Color_Dis(int v_ad)
  53. {
  54.   int Color = v_ad;
  55.   if (Color >= 370 && Color <= 410)         
  56.   {
  57.     bsp_Colorful_RGB_PWM(0, 0, 255);
  58.   }
  59.   else if (Color >= 300 && Color <= 320)
  60.   {
  61.     bsp_Colorful_RGB_PWM(0, 255, 0);
  62.   }
  63.   else if (Color >= 345 && Color <= 365)
  64.   {
  65.     bsp_Colorful_RGB_PWM(255, 0, 0);
  66.   }
  67.   else if (Color >= 330 && Color < 345)
  68.   {
  69.     bsp_Colorful_RGB_PWM(255, 0, 255);
  70.   }
  71.   else if (Color >= 270 && Color <= 290)
  72.   {
  73.     bsp_Colorful_RGB_PWM(0, 255, 255);
  74.   }
  75.   else if (Color >= 250 && Color < 270)
  76.   {
  77.     bsp_Colorful_RGB_PWM(255, 255, 0);
  78.   }
  79.   else
  80.   {
  81.     bsp_Colorful_RGB_PWM(0, 0, 0);
  82.   }
  83. }

  84. int main(void)
  85. {       
  86.         int iGs = 0;
  87.         int TrackSensorLeftValue1 = 1, TrackSensorLeftValue2 = 1, TrackSensorRightValue1 = 1, TrackSensorRightValue2 = 1;
  88.         /*外設(shè)初始化*/
  89.         bsp_init();

  90.         /*按鍵啟動(dòng)*/
  91.         while(bsp_GetKEY());
  92.         Buzzer_GPIO_Init();
  93.         while (1)
  94.         {
  95.                 /*下面兩行主要是測試當(dāng)前環(huán)境光不同顏色的AD值,方便修改上面Color_Dis函數(shù)的范圍值*/
  96.                 //iGs = Get_GS_Value();
  97.                 //printf("Color:%d\r\n", iGs);
  98.                
  99.             bsp_GetLineWalking(&TrackSensorLeftValue1, &TrackSensorLeftValue2, &TrackSensorRightValue1, &TrackSensorRightValue2);
  100.                
  101.                 if ( ((TrackSensorLeftValue1 == LOW || TrackSensorLeftValue2 == LOW)
  102.                 &&  TrackSensorRightValue2 == LOW) || ( TrackSensorLeftValue1 == LOW
  103.                 && (TrackSensorRightValue1 == LOW ||  TrackSensorRightValue2 == LOW)))
  104.                 {
  105.                     Car_Run(3400);
  106.                     delay_ms(60);
  107.                         Car_Stop();
  108.                         delay_ms(200);
  109.                     switch (mapLocation[position][1])
  110.                     {
  111.                       case 0: Car_Stop(); break;
  112.                       case 1: //左轉(zhuǎn)90,這里所說的左轉(zhuǎn)90度其實(shí)是會(huì)讓小車轉(zhuǎn)過一定的角度,然后讓下面的while(1)去判斷
  113.                       //當(dāng)中間的兩路檢測到時(shí)會(huì)停止轉(zhuǎn)動(dòng),所以會(huì)有一個(gè)轉(zhuǎn)動(dòng)90度的效果.
  114.                       {
  115.                           /*延遲旋轉(zhuǎn)轉(zhuǎn)過丁字路口黑線解決探頭開始就在黑線上判斷*/
  116.                           Car_SpinLeft(4300, 4300);
  117.                           delay_ms(200);
  118.                           while (1)
  119.                           {
  120.                             Car_SpinLeft(4300, 4300);
  121.                             bsp_GetLineWalking(&TrackSensorLeftValue1, &TrackSensorLeftValue2, &TrackSensorRightValue1, &TrackSensorRightValue2);
  122.                             if (TrackSensorLeftValue2 == LOW ||  TrackSensorRightValue1 == LOW)
  123.                             {
  124.                               Car_Stop();
  125.                               break;
  126.                             }
  127.                           }
  128.                       } break;
  129.                       case 2://右轉(zhuǎn)90
  130.                       {   
  131.                           /*延遲旋轉(zhuǎn)轉(zhuǎn)過丁字路口黑線解決探頭開始就在黑線上判斷*/
  132.                           Car_SpinRight(4300, 4300);
  133.                           delay_ms(200);
  134.                           while (1)
  135.                           {
  136.                             Car_SpinRight(4300, 4300);
  137.                             bsp_GetLineWalking(&TrackSensorLeftValue1, &TrackSensorLeftValue2, &TrackSensorRightValue1, &TrackSensorRightValue2);
  138.                             if (TrackSensorLeftValue2 == LOW  ||  TrackSensorRightValue1 == LOW)
  139.                             {
  140.                               Car_Stop();
  141.                               break;
  142.                             }
  143.                           }
  144.                
  145.                       } break;
  146.                       case 3://左旋180掉頭
  147.                       {
  148.                                   Car_Stop();
  149.                                   delay_ms(200);
  150.                           BeepOnOffMode();
  151.                           
  152.                                   iGs = Get_GS_Value();
  153.                                   //printf("Color:%d\r\n", iGs);          //這里可以打開調(diào)試數(shù)據(jù)
  154.                                   Color_Dis(iGs);
  155.                           if (position == 37) //走完地圖直接停止
  156.                           {
  157.                             ModeBEEP(3);
  158.                                         BeepOnOffMode();
  159.                             position = 0;
  160.                             while(1);        
  161.                           }         
  162.                           Car_SpinLeft(4300, 4300);
  163.                                   //下面的延時(shí)相比上面的而言因?yàn)橘惖赖念伾珔^(qū)域前有一段黑線,延時(shí)長就是為了略過這條黑線的檢測
  164.                           delay_ms(450);
  165.                           while (1)
  166.                           {
  167.                             Car_SpinLeft(4300, 4300);
  168.                             bsp_GetLineWalking(&TrackSensorLeftValue1, &TrackSensorLeftValue2, &TrackSensorRightValue1, &TrackSensorRightValue2);
  169.                             if (TrackSensorLeftValue2 == LOW ||  TrackSensorRightValue1 == LOW)
  170.                             {
  171.                               Car_Stop();
  172.                               break;
  173.                             }
  174.                           }         
  175.                       } break;
  176.                       case 4: Car_Run(5000); delay_ms(50); break;//直行
  177.                     }
  178.                     position++;
  179.                   }
  180.        
  181.                   // 0 X X X
  182.                   //最左邊檢測到
  183.                   else if ( TrackSensorLeftValue1 == LOW)
  184.                   {
  185.                         Car_SpinLeft(3400, 3400);
  186.                   }
  187.                   // X X X 0
  188.                   //最右邊檢測到
  189.                   else if ( TrackSensorRightValue2 == LOW )
  190.                   {
  191.                         Car_SpinRight(3400, 3400);
  192.                   }
  193.                   //四路循跡引腳電平狀態(tài)
  194.                   // X 0 1 X
  195.                   //處理左小彎
  196.                   else if ( TrackSensorLeftValue2 == LOW && TrackSensorRightValue1 == HIGH)
  197.                   {
  198.                           Car_Left(3400);
  199.                   }
  200.                   //四路循跡引腳電平狀態(tài)
  201.                   // X 1 0 X
  202.                   //處理右小彎
  203.                   else if (TrackSensorLeftValue2 == HIGH && TrackSensorRightValue1 == LOW)
  204.                   {
  205.                     Car_Right(3400);
  206.                   }
  207.                   else if (TrackSensorLeftValue2 == LOW && TrackSensorRightValue1 == LOW)
  208.                   {
  209.                     Car_Run(3400);
  210.                   }

  211.         }
  212.                                                                     
  213. }
復(fù)制代碼

代碼下載: STM32游園賽道.7z (203.43 KB, 下載次數(shù): 36)

評分

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

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:584195 發(fā)表于 2021-8-8 19:37 | 只看該作者
樓主,這是用什么傳感器來感知顏色的
回復(fù)

使用道具 舉報(bào)

板凳
ID:640768 發(fā)表于 2022-3-21 14:16 | 只看該作者
zyluglugl 發(fā)表于 2021-8-8 19:37
樓主,這是用什么傳感器來感知顏色的

紅外循跡傳感器
回復(fù)

使用道具 舉報(bào)

地板
ID:433680 發(fā)表于 2022-3-29 09:42 | 只看該作者

樓主,請問是用那顆傳感器來感知顏色的? 紅外循跡傳感器? 應(yīng)該不能感知顏色! 懇請解惑! 謝謝!
回復(fù)

使用道具 舉報(bào)

5#
ID:433680 發(fā)表于 2022-3-29 09:42 | 只看該作者
樓主,請問是用那顆傳感器來感知顏色的? 紅外循跡傳感器? 應(yīng)該不能感知顏色! 懇請解惑! 謝謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:640768 發(fā)表于 2023-11-21 16:37 | 只看該作者
laigs218 發(fā)表于 2022-3-29 09:42
樓主,請問是用那顆傳感器來感知顏色的? 紅外循跡傳感器? 應(yīng)該不能感知顏色! 懇請解惑! 謝謝!

灰度傳感器 就可以
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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