yl-64颜色识别模块数值不稳定-Arduino中文社区 - Powered by Discuz! Archiver

mak4000bug 发表于 2016-5-16 22:52

yl-64颜色识别模块数值不稳定

yl-64颜色识别模块数值不稳定在光源稳定的时候RGB数值不断变化。
我用的是TCS230程序
#include <TimerOne.h>

#define S0   6   // Please notice the Pin's define
#define S1   5
#define S2   4
#define S3   3
#define OUT    2

int   g_count = 0;    // count the frequecy
int   g_array;   // store the RGB value
int   g_flag = 0;   // filter of RGB queue
float g_SF;      // save the RGB Scale factor


// Init TSC230 and setting Frequency.
void TSC_Init()
{
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(OUT, INPUT);

digitalWrite(S0, LOW);// OUTPUT FREQUENCY SCALING 2%
digitalWrite(S1, HIGH);
}

// Select the filter color
void TSC_FilterColor(int Level01, int Level02)
{
if(Level01 != 0)
    Level01 = HIGH;

if(Level02 != 0)
    Level02 = HIGH;

digitalWrite(S2, Level01);
digitalWrite(S3, Level02);
}

void TSC_Count()
{
g_count ++ ;
}

void TSC_Callback()
{
switch(g_flag)
{
    case 0:
         Serial.println("->WB Start");
         TSC_WB(LOW, LOW);            //Filter without Red
         break;
    case 1:
         Serial.print("->Frequency R=");
         Serial.println(g_count);
         g_array = g_count;
         TSC_WB(HIGH, HIGH);            //Filter without Green
         break;
    case 2:
         Serial.print("->Frequency G=");
         Serial.println(g_count);
         g_array = g_count;
         TSC_WB(LOW, HIGH);             //Filter without Blue
         break;

    case 3:
         Serial.print("->Frequency B=");
         Serial.println(g_count);
         Serial.println("->WB End");
         g_array = g_count;
         TSC_WB(HIGH, LOW);             //Clear(no filter)   
         break;
   default:
         g_count = 0;
         break;
}
}

void TSC_WB(int Level0, int Level1)      //White Balance
{
g_count = 0;
g_flag ++;
TSC_FilterColor(Level0, Level1);
Timer1.setPeriod(1000000);             // set 1s period
}

void setup()
{
TSC_Init();
Serial.begin(9600);
Timer1.initialize();             // defaulte is 1s
Timer1.attachInterrupt(TSC_Callback);
attachInterrupt(0, TSC_Count, RISING);

delay(4000);

for(int i=0; i<3; i++)
    Serial.println(g_array);

g_SF = 255.0/ g_array;   //R Scale factor
g_SF = 255.0/ g_array ;    //G Scale factor
g_SF = 255.0/ g_array ;    //B Scale factor

Serial.println(g_SF);
Serial.println(g_SF);
Serial.println(g_SF);

}

void loop()
{
   g_flag = 0;
   for(int i=0; i<3; i++)
    Serial.println(int(g_array * g_SF));
   delay(4000);

}
程序是这个。但是就不稳定
Arduino UNO                              Color Sensor
Digital 6               -                     S0
Digital 5               -                     S1
Digital 4               -                  S2
Digital 3               -                     S3
Digital 2               -                     OUT
VCC                      -                     VCC
GND                      -                  GND


lehere 发表于 2018-4-2 23:32

我也说一句学习学习,我也想了解颜色识别的相关知识

XUWZE 发表于 2018-4-8 11:28

这个还没接触到 不过数值不稳定也出现再很多我的其他感应器上发生
页: [1]
查看完整版本: yl-64颜色识别模块数值不稳定