今天尝试将tcs3200取色模块和变色LED相连,通过tsc3200模块取色,LED发取色模块取到的颜色,但是失败了。自己怀疑是代码上出了问题,有些弄不懂的地方,我把代码放在下面,求大神们帮我看看哪里有问题~- #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[3]; // store the RGB value
- int g_flag = 0; // filter of RGB queue
- float g_SF[3]; // save the RGB Scale factor
- int f[3];
- int y[3];
- 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);
- pinMode(9, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(12, OUTPUT);
- digitalWrite(12, LOW);
- //12 pin as gnd
- // 打开13脚led作为电源指示:
- }
- // 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[0] = g_count;
- TSC_WB(HIGH, HIGH); //Filter without Green
- break;
- case 2:
- Serial.print("->Frequency G=");
- Serial.println(g_count);
- g_array[1] = 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[2] = 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);
- }
- void setup()
- {
- TSC_Init();
- pinMode(13, OUTPUT);
- digitalWrite(13, HIGH);
- 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[i]);
- g_SF[0] = 255.0/ g_array[0]; //R Scale factor
- g_SF[1] = 255.0/ g_array[1] ; //G Scale factor
- g_SF[2] = 255.0/ g_array[2] ; //B Scale factor
- Serial.println(g_SF[0]);
- Serial.println(g_SF[1]);
- Serial.println(g_SF[2]);
- }
- void loop()
- {
- g_flag = 0;
- delay(4000);
- for(int i=0; i<3; i++)
- {
- f[i]=g_array[i] * g_SF[i];
- Serial.println(f[i]);
- }
- analogWrite(9,g_array[0] * g_SF[0] );
- analogWrite(10,g_array[1] * g_SF[1] );
- analogWrite(11,g_array[2] * g_SF[2] );
-
- }
复制代码 |