极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15228|回复: 5

TSC3200 颜色传感器

[复制链接]
发表于 2012-12-12 20:43:19 | 显示全部楼层 |阅读模式
本帖最后由 萧芸凤 于 2012-12-12 20:45 编辑
  1. #include <TimerOne.h>

  2. #define COLOR_S0     6   
  3. #define COLOR_S1     5
  4. #define COLOR_S2     4
  5. #define COLOR_S3     3
  6. #define COLOR_OUT    2
  7. int frequencecount = 0;    // 计数频率
  8. int RGB_arr[4];
  9. float RGB_scale_factor[4];
  10. ////////////////////// 初始化///////////////////////////////////////
  11. void color_Init()
  12. {
  13.         pinMode(COLOR_S0, OUTPUT);
  14.         pinMode(COLOR_S1, OUTPUT);
  15.         pinMode(COLOR_S2, OUTPUT);
  16.         pinMode(COLOR_S3, OUTPUT);
  17.         pinMode(COLOR_OUT, INPUT);

  18.         digitalWrite(COLOR_S0, LOW);                // 输出频率设定, 2%
  19.         digitalWrite(COLOR_S1, HIGH);

  20.        
  21.         //Timer1.attachInterrupt(colorRead);  
  22.         //attachInterrupt(0, frequence, RISING);  
  23. }

  24. /////////////////// RGB色彩滤镜选择 //////////////////////////////////////////////
  25. void color_Filter(char color)
  26. {
  27.         byte s2,s3;
  28.         if ( color == 'R' || color == 'r')
  29.         {
  30.                 s2 = 0;
  31.                 s3 = 0;
  32.         }
  33.         if ( color == 'G' || color == 'g')
  34.         {
  35.                 s2 = 1;
  36.                 s3 = 1;
  37.         }
  38.         if ( color == 'B' || color == 'b')
  39.         {
  40.                 s2 = 0;
  41.                 s3 = 1;
  42.         }
  43.         if ( color == 'C' || color == 'c')
  44.         {
  45.                 s2 = 1;
  46.                 s3 = 0;
  47.         }
  48.        
  49.         digitalWrite(COLOR_S2, s2);
  50.         digitalWrite(COLOR_S3, s3);
  51. }
  52. ////////////////////////////频率函数,中断函数 //////////////////////////////////////////
  53. void frequence()
  54. {
  55.   frequencecount ++ ;
  56. }

  57. void colorRead( )
  58. {       
  59.         //int RGB_arr[4]
  60.         byte  RGB_flag;
  61.         RGB_flag = 0;
  62.         while(RGB_flag >= 0 && RGB_flag <= 3 )
  63.         {
  64.                 switch(RGB_flag)
  65.                 {
  66.                         case 0:
  67.                                         color_Filter('R');
  68.                                         frequencecount = 0;
  69.                                         RGB_flag++;
  70.                                         Timer1.setPeriod(1000000);
  71.                                         RGB_arr[0] = frequencecount;   
  72.                                         break;
  73.                         case 1:
  74.                                         color_Filter('G');
  75.                                         frequencecount = 0;
  76.                                         RGB_flag++;
  77.                                         Timer1.setPeriod(1000000);
  78.                                         RGB_arr[1] = frequencecount;            //绿色
  79.                                         break;
  80.                         case 2:
  81.                                         color_Filter('G');
  82.                                         frequencecount = 0;
  83.                                         RGB_flag++;
  84.                                         Timer1.setPeriod(1000000);
  85.                                         RGB_arr[2] = frequencecount;   
  86.                                         break;
  87.                         case 3:
  88.                                         color_Filter('C');
  89.                                         frequencecount = 0;
  90.                                         RGB_flag++;
  91.                                         Timer1.setPeriod(1000000);
  92.                                         RGB_arr[3] = frequencecount;            //清除   
  93.                                         break;
  94.                         default:
  95.                                         frequencecount = 0;
  96.                                 break;
  97.                 }

  98.         }
  99. }
  100. /////////////////白平衡设置/////////////////////////////////////
  101. void color_WB_set( )     
  102. {
  103.         //int RGB_arr[4];
  104.         //float *RGB_scale_factor
  105.         colorRead();
  106.         for ( byte i = 0 ; i < 4 ; i ++)
  107.         {
  108.                 RGB_scale_factor[i] = 255 / RGB_arr[i];
  109.         }
  110. }

  111. void setup()
  112. {
  113.         color_Init();
  114.         Serial.begin(9600);
  115.         Timer1.initialize();                                // 定时器初始化,缺省计时周期1s
  116.         //Timer1.attachInterrupt(colorRead);  
  117.         attachInterrupt(0, frequence, RISING);  
  118.        
  119. }

  120. void loop()
  121. {
  122.         float sf[4];
  123.         int RGB_arr[4];
  124.         int RGB_out[4];
  125.         color_WB_set();
  126.         while(1)
  127.         {
  128.                 colorRead();
  129.                 for ( byte i = 0 ; i < 4 ; i ++)
  130.                 {
  131.                         RGB_out[i] = RGB_arr[4] * RGB_scale_factor[i];
  132.                 }

  133.                 for ( byte i = 0 ; i < 4 ; i ++)
  134.                 {
  135.                         Serial.print(RGB_out[i]);
  136.                         Serial.print("  |  ");
  137.                 }
  138.                 Serial.println();
  139.         }

  140. }
复制代码
回复

使用道具 举报

发表于 2013-7-25 12:24:56 | 显示全部楼层
能问下内置的那4个白色LED怎么点亮吗
回复 支持 反对

使用道具 举报

发表于 2013-7-26 09:29:42 | 显示全部楼层
我都想知道楼上的问题如何解决
回复 支持 反对

使用道具 举报

发表于 2013-8-6 13:45:20 | 显示全部楼层
这个编程看起来比R大的好。对于我的项目,由于是外部光源透射采光,所以也不用点亮自带的灯了。
回复 支持 反对

使用道具 举报

发表于 2013-8-6 15:19:49 | 显示全部楼层
经实践 该程序实现不了测量。串口无输出。在认真修改中。应该是在中断的地方出错了。
回复 支持 反对

使用道具 举报

发表于 2015-9-22 16:01:22 | 显示全部楼层
怎么用啊,不能用啊,串口输出的都是啥啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 03:06 , Processed in 0.039881 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表