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

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

QQ登錄

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

搜索
查看: 6599|回復(fù): 8
收起左側(cè)

HAL庫(kù)驅(qū)動(dòng)TCS3200顏色識(shí)別模塊-STM32F103ZET6

  [復(fù)制鏈接]
ID:478644 發(fā)表于 2019-2-20 21:36 | 顯示全部樓層 |閱讀模式
最近在做一個(gè)智能物料搬運(yùn)小車(chē),用到了顏色識(shí)別,最開(kāi)始用OpenMv實(shí)現(xiàn)功能,由于實(shí)際需求有變,改用顏色識(shí)別模塊實(shí)現(xiàn)響應(yīng)功能。環(huán)境:keil5、STM32CubeMX 5.0、STM32F103ZET6開(kāi)發(fā)板
本例程僅用于粗略的分辨紅綠藍(lán)顏色
首先根據(jù)TCS3200模塊使用手冊(cè)配置管腳
STM32CubeMX中根據(jù)需求設(shè)置管腳
PE4--- OUT
PE5--- OE
PE6--- S3
PE7--- S2
PE8--- S1
PE9--- S0
PE4為外部中斷模式,打開(kāi)EXTI line4外部中斷
其余管腳配置為輸出模式
生成代碼


根據(jù)模塊的工作方式配置函數(shù):
白平衡函數(shù)
紅色通道檢測(cè)函數(shù)
綠色通道檢測(cè)函數(shù)
藍(lán)色通道檢測(cè)函數(shù)
即可對(duì)顏色進(jìn)行識(shí)別,代碼如附件所示:

TCS3200實(shí)物

TCS3200實(shí)物


單片機(jī)源程序如下:
  1. /* USER CODE END Header */

  2. /* Includes ------------------------------------------------------------------*/
  3. #include "main.h"
  4. #include "tim.h"
  5. #include "usart.h"
  6. #include "gpio.h"

  7. /* Private includes ----------------------------------------------------------*/
  8. /* USER CODE BEGIN Includes */
  9. #include "TCS3200.h"
  10. /* USER CODE END Includes */

  11. /* Private typedef -----------------------------------------------------------*/
  12. /* USER CODE BEGIN PTD */

  13. /* USER CODE END PTD */

  14. /* Private define ------------------------------------------------------------*/
  15. /* USER CODE BEGIN PD */

  16. /* USER CODE END PD */

  17. /* Private macro -------------------------------------------------------------*/
  18. /* USER CODE BEGIN PM */

  19. /* USER CODE END PM */

  20. /* Private variables ---------------------------------------------------------*/

  21. /* USER CODE BEGIN PV */

  22. /* USER CODE END PV */

  23. /* Private function prototypes -----------------------------------------------*/
  24. void SystemClock_Config(void);
  25. static void MX_NVIC_Init(void);
  26. /* USER CODE BEGIN PFP */
  27. // printf()重定向
  28. #ifdef __GNUC__
  29. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  30. #else
  31. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  32. #endif
  33. PUTCHAR_PROTOTYPE
  34. {
  35.   HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
  36.   return ch;
  37. }
  38. /* USER CODE END PFP */

  39. /* Private user code ---------------------------------------------------------*/
  40. /* USER CODE BEGIN 0 */
  41. extern uint16_t Rgena,Ggena,Bgena;
  42. extern uint16_t count,dir;

  43. /* USER CODE END 0 */

  44. /**
  45.   * @brief  The application entry point.
  46.   * @retval int
  47.   */
  48. int main(void)
  49. {
  50.   /* USER CODE BEGIN 1 */

  51.   /* USER CODE END 1 */

  52.   /* MCU Configuration--------------------------------------------------------*/

  53.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  54.   HAL_Init();

  55.   /* USER CODE BEGIN Init */

  56.   /* USER CODE END Init */

  57.   /* Configure the system clock */
  58.   SystemClock_Config();

  59.   /* USER CODE BEGIN SysInit */

  60.   /* USER CODE END SysInit */

  61.   /* Initialize all configured peripherals */
  62.   MX_GPIO_Init();
  63.   MX_USART1_UART_Init();
  64.   MX_TIM6_Init();

  65.   /* Initialize interrupts */
  66.   MX_NVIC_Init();
  67.   /* USER CODE BEGIN 2 */
  68.   HAL_TIM_Base_Start_IT(&htim6);
  69.   TCS3200_Init();
  70.   WhiteBalance();
  71.   /* USER CODE END 2 */

  72.   /* Infinite loop */
  73.   /* USER CODE BEGIN WHILE */
  74.   while (1)
  75.   {
  76.     /* USER CODE END WHILE */

  77.     /* USER CODE BEGIN 3 */
  78.     if(Color_test(1) == 1)
  79.       printf("Red\r\n");
  80.     else
  81.       printf("None\r\n");
  82. //    printf("%f\t%f\t%f\r\n",255.0/Rgena,255.0/Ggena,255.0/Bgena);
  83. //    printf("%d\t%d\t%d\r\n\r\n",Rgena,Ggena,Bgena);
  84. //    printf("%d\t%d\t%d\r\n",TCS3200_RED(),TCS3200_GREEN(),TCS3200_BLUE());
  85.     HAL_Delay(500);
  86. //    printf("%d",Color_test());
  87.   }
  88.   /* USER CODE END 3 */
  89. }

  90. /**
  91.   * @brief System Clock Configuration
  92.   * @retval None
  93.   */
  94. void SystemClock_Config(void)
  95. {
  96.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  97.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  98.   /**Initializes the CPU, AHB and APB busses clocks
  99.   */
  100.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  101.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  102.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV2;
  103.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  104.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  105.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  106.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL15;
  107.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  108.   {
  109.     Error_Handler();
  110.   }
  111.   /**Initializes the CPU, AHB and APB busses clocks
  112.   */
  113.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  114.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  115.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  116.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  117.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  118.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  119.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  120.   {
  121.     Error_Handler();
  122.   }
  123. }

  124. /**
  125.   * @brief NVIC Configuration.
  126.   * @retval None
  127.   */
  128. static void MX_NVIC_Init(void)
  129. {
  130.   /* EXTI4_IRQn interrupt configuration */
  131.   HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
  132.   HAL_NVIC_EnableIRQ(EXTI4_IRQn);
  133.   /* USART1_IRQn interrupt configuration */
  134.   HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
  135.   HAL_NVIC_EnableIRQ(USART1_IRQn);
  136.   /* TIM6_IRQn interrupt configuration */
  137.   HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0);
  138.   HAL_NVIC_EnableIRQ(TIM6_IRQn);
  139. }

  140. /* USER CODE BEGIN 4 */
  141. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  142. {
  143.   UNUSED(htim);
  144.   if(htim == &htim6)
  145.   {
  146.     if(dir == 200)
  147.     {
  148.       HAL_GPIO_TogglePin(GPIOB,LED_Pin);
  149.       dir = 0;
  150.     }
  151.   }
  152. }
  153. /* USER CODE END 4 */

  154. /**
  155.   * @brief  This function is executed in case of error occurrence.
  156.   * @retval None
  157.   */
  158. void Error_Handler(void)
  159. {
  160.   /* USER CODE BEGIN Error_Handler_Debug */
  161.   /* User can add his own implementation to report the HAL error return state */

  162.   /* USER CODE END Error_Handler_Debug */
  163. }

  164. #ifdef  USE_FULL_ASSERT
  165. /**
  166.   * @brief  Reports the name of the source file and the source line number
  167.   *         where the assert_param error has occurred.
  168.   * @param  file: pointer to the source file name
  169.   * @param  line: assert_param error line source number
  170.   * @retval None
  171.   */
  172. void assert_failed(uint8_t *file, uint32_t line)
  173. {
  174.   /* USER CODE BEGIN 6 */
  175.   /* User can add his own implementation to report the file name and line number,
  176.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  177.   /* USER CODE END 6 */
  178. }
  179. #endif /* USE_FULL_ASSERT */

  180. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復(fù)制代碼

所有資料51hei提供下載:
TCS3200-TEST.7z (254.87 KB, 下載次數(shù): 128)



評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
ID:471751 發(fā)表于 2019-3-17 11:41 | 顯示全部樓層
樓主也是參加工訓(xùn)比賽的嗎
回復(fù)

使用道具 舉報(bào)

ID:478644 發(fā)表于 2019-3-17 20:57 | 顯示全部樓層
死不悔改 發(fā)表于 2019-3-17 11:41
樓主也是參加工訓(xùn)比賽的嗎

嗯嗯,還有一周就比賽了
回復(fù)

使用道具 舉報(bào)

ID:464371 發(fā)表于 2019-4-28 15:49 | 顯示全部樓層
很有用,下載看一下
回復(fù)

使用道具 舉報(bào)

ID:478644 發(fā)表于 2019-5-14 15:33 | 顯示全部樓層
xddddd 發(fā)表于 2019-4-28 15:49
很有用,下載看一下

嗯嗯,互相幫助,共同進(jìn)步
回復(fù)

使用道具 舉報(bào)

ID:244290 發(fā)表于 2019-12-27 17:49 | 顯示全部樓層
下載一個(gè),沒(méi)用過(guò)這個(gè)庫(kù)
回復(fù)

使用道具 舉報(bào)

ID:684752 發(fā)表于 2020-1-15 14:38 | 顯示全部樓層
樓主,請(qǐng)問(wèn)為什么沒(méi)有重寫(xiě)外部中斷回調(diào)呀,那個(gè)count是在外部中斷回調(diào)里面自加的吧
回復(fù)

使用道具 舉報(bào)

ID:584195 發(fā)表于 2021-8-11 07:18 | 顯示全部樓層
樓主,這個(gè)可以測(cè)試燈的顏色變化嗎?
回復(fù)

使用道具 舉報(bào)

10#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:875327 發(fā)表于 2023-7-6 09:33 | 顯示全部樓層
樓主您好,我目前在嘗試做一個(gè)搬運(yùn)小車(chē),看到您發(fā)的帖子之后想和您交流學(xué)習(xí)一下,如果可以的話請(qǐng)您
回復(fù)

使用道具 舉報(bào)

12#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天操综合网 | 在线视频一区二区 | 久久网日本 | 一区二区三区视频在线免费观看 | 精品一区在线看 | 性欧美精品一区二区三区在线播放 | 中文字幕亚洲视频 | 羞羞视频网站免费观看 | 欧美午夜剧场 | 天天操天天操 | 亚洲av毛片 | 农夫在线精品视频免费观看 | 日韩视频国产 | 欧美精品一区在线 | 中文字幕在线第一页 | 欧美日韩在线观看一区二区三区 | 国产做a爱免费视频 | 黄色免费看| 中文字幕在线视频精品 | 日韩国产一区二区 | 久艹网站| 精品亚洲一区二区 | 操人网站| 成人激情视频在线播放 | 亚洲国产网址 | 亚洲精品大片 | 欧美精品在线一区 | 久久视频精品 | 日本视频免费 | 久久婷婷色 | 一区二区三区av夏目彩春 | 亚洲一级视频在线 | 中文字幕成人 | 国产精品久久久久久久午夜片 | 欧美日韩在线精品 | 亚洲欧美在线视频 | 精品九九 | 久久88 | 久久久久久久久99精品 | 色视频一区二区 | 亚洲精品欧美 |