// 2017/02/9 // Faya-Nugget 範例程式 (ColorSensor_1.ino) // 單元: 模組介紹:faya 顏色感測模組 // 網址:https://fayalab.blogspot.com/2018/02/colorsensor.html // 目標: (1) 利用顏色感應模組測出物體的RGB值 // (2) 將測出的RGB值顯示在RGB LED模組 // 接線: Arduino ==> faya RGB LED模組 // 12 ==> R // 11 ==> G // 10 ==> B // 接線: Arduino ==> faya 色彩感應模組 // 9 ==> S0 // 8 ==> S1 // 7 ==> S2 // 6 ==> S3 // 5 ==> LED // 2 ==> OUT //定義腳位 #define LED_R 12 #define LED_G 11 #define LED_B 10 #define S0 9 #define S1 8 #define S2 7 #define S3 6 #define LED 5 #define OUT 2 //預設RGB的輸出頻率為0 int frequencyR = 0; int frequencyG = 0; int frequencyB = 0; void setup() { //設定腳位輸出為INPUT或OUTPUT pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(LED, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); pinMode(OUT, INPUT); // 設定頻率縮放到2% digitalWrite(S0,LOW); // setting output frequency scalingx digitalWrite(S1,HIGH); // 00 = power down ; 01 = 2%; 10=20%; 11=100% //開啟通訊阜 Serial.begin(9600); } void loop() { digitalWrite(LED,HIGH); //開啟LED燈 R_detect(); //偵測紅光成份 G_detect(); //偵測綠光成份 B_detect(); //偵測藍光成份 digitalWrite(LED,LOW); //關閉LED燈 Color_show(); // 判斷顏色並在RGB LED上顯示 delay(500); } void R_detect() //偵測紅光成份 { digitalWrite(S2,LOW); //開啟紅色濾光器 digitalWrite(S3,LOW); frequencyR = 1000000/pulseIn(OUT, LOW); // 讀取輸出頻率 Serial.print("R= "); // 印出數值在通訊阜上 Serial.print(frequencyR); Serial.print(" "); } void G_detect() //偵測綠光成份 { digitalWrite(S2,HIGH); //開啟綠色濾光器 digitalWrite(S3,HIGH); frequencyG = 1000000/pulseIn(OUT, LOW); // 讀取輸出頻率 Serial.print("G= "); // 印出數值在通訊阜上 Serial.print(frequencyG); Serial.print(" "); } void B_detect() //偵測藍光成份 { digitalWrite(S2,LOW); //開啟藍色濾光器 digitalWrite(S3,HIGH); frequencyB = 1000000/pulseIn(OUT, LOW); // 讀取輸出頻率 Serial.print("B= "); // 印出數值在通訊阜上 Serial.print(frequencyB); Serial.println(" "); } void Color_show() // 判斷顏色並在RGB LED上顯示 { if(frequencyR > frequencyG && frequencyR > frequencyB) //判斷紅色待測物 { digitalWrite(LED_R,HIGH); } else { digitalWrite(LED_R,LOW); } if(frequencyG > frequencyR && frequencyG > frequencyB) //判斷綠色待測物 { digitalWrite(LED_G,HIGH); } else { digitalWrite(LED_G,LOW);} if(frequencyB > frequencyR && frequencyB > frequencyG) //判斷藍色待測物 { digitalWrite(LED_B,HIGH); } else { digitalWrite(LED_B,LOW); } if(frequencyR > frequencyB && frequencyG > frequencyB && frequencyB < 2000) //判斷黃色待測物 { digitalWrite(LED_R,HIGH); digitalWrite(LED_G,HIGH); } if(frequencyR > 3000 && frequencyG > 3000 && frequencyB > 3000) //判斷白色待測物 { digitalWrite(LED_R,HIGH); digitalWrite(LED_G,HIGH); digitalWrite(LED_B,HIGH); } if(frequencyR < 1000 && frequencyG < 1000 && frequencyB < 1000) //判斷黑色待測物 { digitalWrite(LED_R,LOW); digitalWrite(LED_G,LOW); digitalWrite(LED_B,LOW); } }