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

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

QQ登錄

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

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

STM32 TCS3200顏色感應(yīng)源碼

[復(fù)制鏈接]
ID:255072 發(fā)表于 2018-10-29 15:51 | 顯示全部樓層 |閱讀模式
用STM32做的顏色感應(yīng),開(kāi)始需要白平衡。
RGB用算法轉(zhuǎn)換成了HVS。

QQ截圖20181029154758.png

視頻:http://v.youku.com/v_show/id_XNDY1NDEwMTQ0.html

單片機(jī)源程序如下:
  1. /************************************************************************************                                                                                       
  2. *                                TCS3200  STM32版                                    
  3. *                                RGB顏色傳感器                                                                                    
  4. ****************************************************************************************/
  5. //正點(diǎn)原子開(kāi)發(fā)板  
  6. //陳新梢
  7. #include <stm32f10x_lib.h>
  8. #include "sys.h"
  9. #include "usart.h"               
  10. #include "delay.h"        
  11. #include "led.h"
  12. #include "key.h"
  13. #include "exti.h"
  14. #include "wdg.h"
  15. #include "timer.h"
  16. #include "lcd.h"           
  17. #include "rtc.h"
  18. #include "wkup.h"
  19. #include "adc.h"
  20. #include "dma.h"
  21. #include "24cxx.h"
  22. #include "flash.h"
  23. #include "touch.h"
  24. #include "24l01.h"
  25. #include "mmc_sd.h"
  26. #include "remote.h"
  27. #include "ds18b20.h"
  28. #include "mouse.h"
  29. #include "text.h"
  30. #include "fat.h"
  31. #include "fontupd.h"
  32. #include "tcs3200.h"

  33. /*****************************************************************************
  34.    H指hue(色相)、S指saturation(飽和度)、L指lightness(亮度)、V指value(色調(diào))、B指brightness(明度)。


  35.   色相(H)是色彩的基本屬性,就是平常所說(shuō)的顏色名稱,如紅色、黃色等。
  36.   飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數(shù)值。
  37.   明度(V),亮度(B),取0-100%。         
  38.   
  39.    0度: 紅色,RGB:(255, 0, 0), 255:R, 0:B,G+  
  40.    60度: 黃色,RGB:(255,255, 0),255:G, 0:B, R-  
  41.    120度: 綠色,RGB:( 0,255, 0),255:G, 0:R,B+  
  42.    180度: 青色,RGB:( 0,255,255),255:B, 0:R,G-  
  43.    240度: 藍(lán)色,RGB:( 0, 0,255),255:B, 0:G,R+  
  44.    300度: 紫色,RGB:(255, 0,255),255:R, 0:G,B-  
  45.    360度: 紅色,RGB:(255, 0, 0),255:R, 0:B,G+        


  46.   RGB轉(zhuǎn)化到HSV的算法                                                
  47.     max=max(R,G,B)
  48.     min=min(R,G,B)
  49.      if R = max, H = (G-B)/(max-min)
  50.     if G = max, H = 2 + (B-R)/(max-min)
  51.     if B = max, H = 4 + (R-G)/(max-min)
  52.     H = H * 60
  53.     if H < 0, H = H + 360
  54.     V=max(R,G,B)
  55.     S=(max-min)/max
  56. ******************************************************************************/
  57. //============================
  58. void chromatogram(void);  //函數(shù)聲明
  59. //============================

  60. int main(void)
  61. {        
  62.         float Max=0,Min=0;
  63.         float Rhsv=0,Ghsv=0,Bhsv=0;
  64.         float H=0,S=0,V=0;
  65.         u16 i;
  66.         u8 R=0x00,G=0x00,B=0x00;
  67.         u16 RGB=0x0000;
  68.                            
  69.         Stm32_Clock_Init(9);//系統(tǒng)時(shí)鐘設(shè)置
  70.         delay_init(72);                //延時(shí)初始化
  71.         uart_init(72,9600); //串口1初始化            
  72.         LCD_Init();                        //初始化液晶                  
  73.         LED_Init();         //LED初始化        

  74.           LCD_Clear(WHITE);

  75.         POINT_COLOR=RED;
  76.         LCD_ShowString(10,180,"TCS3200 init");

  77.         for(i=0;i<50;i++) delay_ms(50);   

  78.         tcs3200_init(1,1);//初始化(速率調(diào)整)
  79.         whitebalance();        //白平衡  

  80.         LCD_ShowString(0,0,"Rgena:");
  81.         LCD_ShowString(0,18,"Ggena:");
  82.         LCD_ShowString(0,36,"Bgena:");
  83.         LCD_ShowNum(50,0,Rgena,5,12);  //顯示一個(gè)數(shù)字
  84.         LCD_ShowNum(50,18,Ggena,5,12);  //顯示一個(gè)數(shù)字
  85.         LCD_ShowNum(50,36,Bgena,5,12);  //顯示一個(gè)數(shù)字


  86.         POINT_COLOR=BLACK;
  87.         LCD_ShowString(30,50,"R:");
  88.         LCD_ShowString(30,70,"G:");
  89.         LCD_ShowString(30,90,"B:");
  90.         LCD_ShowString(30,110,"H:");
  91.         LCD_ShowString(30,130,"V:");
  92.         LCD_ShowString(30,150,"S:");
  93.         chromatogram();//色譜調(diào)出

  94.         while(1)                                                   
  95.         {
  96. //=================================================================================
  97.                 R = tcs3200_RED();
  98.                 G = tcs3200_GREEN();        //取RGB值
  99.                 B = tcs3200_BLUE();         
  100. //================================================================================
  101.                 Rhsv = (float) R/25/10;
  102.                 Ghsv = (float) G/25/10;         //RGB轉(zhuǎn)換成0,1.
  103.                 Bhsv = (float) B/25/10;

  104. //=================================================================================
  105.                                                                                                                                          //RGB轉(zhuǎn)HSV算法
  106.                 Max = (Rhsv>Ghsv)?Rhsv:Ghsv;                                                                  //RGB轉(zhuǎn)HSV算法
  107.                 Max = (Max>Bhsv)?Max:Bhsv;                //取RGB最大值                                   //RGB轉(zhuǎn)HSV算法
  108.                 Min = (Rhsv<Ghsv)?Rhsv:Ghsv;                                                                    //RGB轉(zhuǎn)HSV算法
  109.                 Min = (Min<Bhsv)?Min:Bhsv;                //去RGB最小值                                         //RGB轉(zhuǎn)HSV算法
  110.                                                                                                                                                   //RGB轉(zhuǎn)HSV算法                                
  111.                 if(Rhsv==Max) H = (Ghsv-Bhsv)/(Max-Min);                                                   //RGB轉(zhuǎn)HSV算法
  112.                 if(Ghsv==Max) H = 2+(Bhsv-Rhsv)/(Max-Min);                                                          //RGB轉(zhuǎn)HSV算法
  113.                 if(Bhsv==Max) H = 4+(Rhsv-Ghsv)/(Max-Min);                                                         //RGB轉(zhuǎn)HSV算法
  114.                 H =(int) (H*60);                                                                                          //RGB轉(zhuǎn)HSV算法
  115.                 if(H<0) H = H+360;                                                                                                           //RGB轉(zhuǎn)HSV算法
  116.                                                                                                                                                                //RGB轉(zhuǎn)HSV算法
  117.                 V = (Rhsv>Ghsv)?Rhsv:Ghsv;                                                                                                 //RGB轉(zhuǎn)HSV算法
  118.                 V = (V>Bhsv)?V:Bhsv;                //取V的數(shù)值                                                                          //RGB轉(zhuǎn)HSV算法
  119.                                                                                                                                                                    //RGB轉(zhuǎn)HSV算法
  120.                 S = (Max-Min)/Max;                        //取S的數(shù)值                                                                                //RGB轉(zhuǎn)HSV算法
  121.                                                                                                                                                                           //RGB轉(zhuǎn)HSV算法
  122.                 V = (int) (V*100);                                                                                                                          //RGB轉(zhuǎn)HSV算法
  123.                 S = (int) (S*100);                                                                                                                           //RGB轉(zhuǎn)HSV算法
  124. //======================================================================================================
  125.                 LCD_ShowNum(50,50,R,5,12);  //顯示一個(gè)數(shù)字
  126.                 LCD_ShowNum(50,70,G,5,12);  //顯示一個(gè)數(shù)字
  127.                 LCD_ShowNum(50,90,B,5,12);  //顯示一個(gè)數(shù)字
  128.                 LCD_ShowNum(50,110,H,5,12);  //顯示一個(gè)數(shù)字
  129.                 LCD_ShowNum(50,130,V,5,12);  //顯示一個(gè)數(shù)字
  130.                 LCD_ShowNum(50,150,S,5,12);  //顯示一個(gè)數(shù)字
  131. //                R = 0xff;
  132. //                G = 0xff;
  133. //                B = 0xff;
  134. //=====================================================
  135.                 RGB = 0x0000;
  136.                 RGB |=(unsigned long) R*1000/8225<<11;                           
  137.                 RGB |=(unsigned long) G*1000/4047<<5;          //轉(zhuǎn)換成屏幕的4W色顯示
  138.                 RGB |=(unsigned long) B*1000/8225;               
  139. //=====================================================
  140.                 LCD_Fill(10,170,80,260,RGB);   //顯示色彩
  141.                 delay_ms(50);                                   //刷新次數(shù)



  142.         }
  143. }


  144. /**********************************************
  145. *函數(shù)名:void chromatogram(void)
  146. *功能:在屏幕上面顯示一張色譜
  147. *參數(shù):木有
  148. *返回值:木有
  149. ***********************************************/                                 
  150. void chromatogram(void)
  151. {

  152.         u16 i=0;
  153.         u16 color;
  154.         u16 Ri=0,Gi=0,Bi=0;

  155. //======================================================================               
  156.         Ri = 240;Gi = 0x00;Bi = 0x00;               
  157.         for(i=0;i<60;i++)
  158.         {
  159.                 color  = (unsigned long) Gi*1000/4047<<5;
  160.                 color |= (unsigned long) Ri*1000/8225<<11;        //G加上去                           
  161.                 color |= (unsigned long) Bi*1000/8225;                        
  162.                 LCD_Fill(100,i,230,i,color);        
  163.                
  164.                 Gi = Gi+4;        
  165.         }
  166.         Ri = 240;Gi = 240;Bi = 0x00;
  167.         for(i=60;i<120;i++)
  168.         {
  169.                 color  = (unsigned long) Ri*1000/8225<<11;                                   
  170.                 color |= (unsigned long) Gi*1000/4047<<5;        //R降下來(lái)
  171.                 color |= (unsigned long) Bi*1000/8225;        
  172.                 LCD_Fill(100,i,230,i,color);

  173.                 Ri = Ri-4;
  174.         }
  175.         Ri = 0x00;Gi = 240;Bi = 0x00;
  176.         for(i=120;i<180;i++)
  177.         {
  178.                 color  = (unsigned long) Bi*1000/8225;        
  179.                 color |= (unsigned long) Ri*1000/8225<<11;        //B加上去                           
  180.                 color |= (unsigned long) Gi*1000/4047<<5;
  181.                 LCD_Fill(100,i,230,i,color);

  182.                 Bi = Bi+4;
  183.         }
  184.         Ri = 0x00;Gi = 240;Bi = 240;
  185.         for(i=180;i<240;i++)
  186.         {
  187.                 color  = (unsigned long) Gi*1000/4047<<5;
  188.                 color |= (unsigned long) Bi*1000/8225;                //G降下來(lái)
  189.                 color |= (unsigned long) Ri*1000/8225<<11;                                   
  190.                 LCD_Fill(100,i,230,i,color);

  191.                 Gi = Gi-4;
  192.         }
  193.         Ri = 0x00;Gi = 0x00;Bi = 240;
  194.         for(i=240;i<300;i++)
  195.         {
  196.                 color = (unsigned long) Ri*1000/8225<<11;                                   
  197.                 color |= (unsigned long) Gi*1000/4047<<5;          //R加上去
  198.                 color |= (unsigned long) Bi*1000/8225;        
  199.                 LCD_Fill(100,i,230,i,color);

  200.                 Ri = Ri+4;
  201.         }
  202.         Ri = 240;Gi = 0x00;Bi = 240;
  203.         for(i=300;i<360;i++)
  204.         {
  205.                 color  = (unsigned long) Bi*1000/8225;        
  206.                 color |= (unsigned long) Ri*1000/8225<<11;                                   
  207.                 color |= (unsigned long) Gi*1000/4047<<5;                //B降下來(lái)
  208.                 LCD_Fill(100,i,230,i,color);

  209.                 Bi = Bi-4;
  210.         }
  211. //===========================================================================
  212.         
  213. }
復(fù)制代碼

所有資料51hei提供下載:
STM32 TCS3200.rar (157.55 KB, 下載次數(shù): 86)


回復(fù)

使用道具 舉報(bào)

ID:471751 發(fā)表于 2019-1-22 17:17 | 顯示全部樓層
可以問(wèn)一下嗎,為什么tcs3200有時(shí)候檢測(cè)不了,分辨不了
回復(fù)

使用道具 舉報(bào)

ID:471751 發(fā)表于 2019-1-22 17:19 | 顯示全部樓層
可以問(wèn)下tcs3200為什么檢測(cè)不了,區(qū)分不開(kāi)紅綠藍(lán)這些顏色
回復(fù)

使用道具 舉報(bào)

ID:721815 發(fā)表于 2020-4-3 20:14 | 顯示全部樓層
你好,我下載了代碼也看了,但是不知道 u16 amount 這個(gè)變量在哪里統(tǒng)計(jì)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 波多野结衣精品 | 色视频在线免费观看 | 中文在线一区二区 | 黑人性hd| 刘亦菲国产毛片bd | 日本中文字幕在线观看 | 日本久久一区 | 国产成人精品一区二区三区四区 | 91麻豆精品一区二区三区 | a在线免费观看 | 午夜噜噜噜 | 六月色婷| 久久33| 一本色道精品久久一区二区三区 | 日韩一区二区三区视频在线播放 | 欧美xxxx网站 | 先锋资源网站 | 古装三级在线播放 | 精品亚洲第一 | 最近中文字幕在线视频1 | 日韩精品1区2区3区 爱爱综合网 | 国产精品久久av | av在线黄 | 亚洲一区视频 | 欧美日韩免费一区二区三区 | 日韩欧美亚洲 | 久草视频观看 | 日韩欧美中文在线 | 久草热在线| 手机日韩 | 麻豆久久久 | 国产资源在线观看 | 日韩成人免费视频 | 精品在线看 | 日韩精品在线观看视频 | 亚洲欧美日韩中文字幕一区二区三区 | 日韩欧美国产一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 国产一级片精品 | 天天艹天天干天天 | 天天天天操 |