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

標題: STM32顏色識別循跡代碼 STM32四驅車運動庫函數版本 [打印本頁]

作者: 超大俠    時間: 2021-8-6 10:38
標題: STM32顏色識別循跡代碼 STM32四驅車運動庫函數版本
  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        主函數
  8. * @details      
  9. * @par History  
  10. *                 
  11. * version:                liusen_20170717
  12. */
  13. //本實驗對環境的要求較高,需要用戶自行調整循跡模塊的靈敏度
  14. //灰度傳感器在不同的光照條件下對不同的顏色有不同的數值
  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. //這里可以自定義路徑規劃, 小車放置在起始位置深圳, 根據下一個十字或者丁字路口來寫 如上行注釋來左轉 、右轉 、直行 、掉頭。
  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         顏色設置根據實際情況采集數據顯示
  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.         /*外設初始化*/
  89.         bsp_init();

  90.         /*按鍵啟動*/
  91.         while(bsp_GetKEY());
  92.         Buzzer_GPIO_Init();
  93.         while (1)
  94.         {
  95.                 /*下面兩行主要是測試當前環境光不同顏色的AD值,方便修改上面Color_Dis函數的范圍值*/
  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: //左轉90,這里所說的左轉90度其實是會讓小車轉過一定的角度,然后讓下面的while(1)去判斷
  113.                       //當中間的兩路檢測到時會停止轉動,所以會有一個轉動90度的效果.
  114.                       {
  115.                           /*延遲旋轉轉過丁字路口黑線解決探頭開始就在黑線上判斷*/
  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://右轉90
  130.                       {   
  131.                           /*延遲旋轉轉過丁字路口黑線解決探頭開始就在黑線上判斷*/
  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);          //這里可以打開調試數據
  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.                                   //下面的延時相比上面的而言因為賽道的顏色區域前有一段黑線,延時長就是為了略過這條黑線的檢測
  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.                   //四路循跡引腳電平狀態
  194.                   // X 0 1 X
  195.                   //處理左小彎
  196.                   else if ( TrackSensorLeftValue2 == LOW && TrackSensorRightValue1 == HIGH)
  197.                   {
  198.                           Car_Left(3400);
  199.                   }
  200.                   //四路循跡引腳電平狀態
  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. }
復制代碼

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

作者: zyluglugl    時間: 2021-8-8 19:37
樓主,這是用什么傳感器來感知顏色的

作者: 超大俠    時間: 2022-3-21 14:16
zyluglugl 發表于 2021-8-8 19:37
樓主,這是用什么傳感器來感知顏色的

紅外循跡傳感器
作者: laigs218    時間: 2022-3-29 09:42
超大俠 發表于 2022-3-21 14:16
紅外循跡傳感器

樓主,請問是用那顆傳感器來感知顏色的? 紅外循跡傳感器? 應該不能感知顏色! 懇請解惑! 謝謝!
作者: laigs218    時間: 2022-3-29 09:42
樓主,請問是用那顆傳感器來感知顏色的? 紅外循跡傳感器? 應該不能感知顏色! 懇請解惑! 謝謝!
作者: 超大俠    時間: 2023-11-21 16:37
laigs218 發表于 2022-3-29 09:42
樓主,請問是用那顆傳感器來感知顏色的? 紅外循跡傳感器? 應該不能感知顏色! 懇請解惑! 謝謝!

灰度傳感器 就可以




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品2区 | 中文字幕在线视频免费观看 | 精品久久99 | 91精品国产欧美一区二区 | 亚洲综合中文字幕在线观看 | 中文字幕在线播放第一页 | 91精品久久久久久久 | 日韩在线免费观看视频 | 亚洲精品一区二区另类图片 | 国产99视频精品免视看9 | 欧美最猛黑人xxxx黑人 | 成人三级av | 国产91丝袜在线18 | 蜜桃精品视频在线 | 国产在线一区二 | 色吧久久| 色资源在线观看 | 国产精品久久久久久久久久不蜜臀 | 婷婷午夜天 | 国产精品xxxx| 久久美女网 | 91亚洲精品在线 | 黄视频国产 | 日本免费在线观看视频 | 中文字幕在线播放第一页 | 精品国产视频 | 亚洲综合色视频在线观看 | 久久一区精品 | 亚洲男女视频在线观看 | 午夜电影在线播放 | 日韩在线一区二区三区 | 欧美中文在线 | 在线视频成人 | 最新av在线网址 | 日本高清视频在线播放 | 涩涩视频网站在线观看 | 久久av影院| 成人免费观看视频 | 国产成人99久久亚洲综合精品 | 天天综合天天 | 欧美精品在线免费观看 |