Uygulama Açıklaması
Bir önceki uygulamada sensörün renklere göre verdiği değerler aşağıdaki gibidir:
Kırmızı :R=256 G = 202 B = 185
Yeşil :R=184 G = 256 B = 196
Mavi :R=146 G = 226 B = 255
Sarı :R=267 G = 297 B = 233
Cyan :R=197 G = 278 B = 281
Magenta:R=256 G = 220 B = 244
Bu değerlere baktığımızda sensör ana renklerde 255 veya üzeri değer veriyor, ara renklerde ise, ara rengi oluşturan ana renk değerleri yine 255 veya üzerinde (Magenta rengi hariç). Magenta rengindeki ana renk olan Mavinin 255 in altında değer vermesi nedeniyle şu anki uygulama olan 3. uygulamada, if-else şartlarını yazarken, bunu göz önünde bulundurduk.
Programlama Kodları
//AÇIKLAMA
//Bu uygulamada sensör renkleri okur, ham değerleri alır. Ardından gerçek RGB değerlerine denk gelen değerler hesaplanır.
//Buna göre hangi rengin okunduğu seri port ekranına yazdırılır. "constrain" fonksiyonu kullanılarak okunan değerler
//0 - 255 arasında tutulur. Bu fonksiyon ile Değer 255'ten büyükse 255'e, 0'dan küçükse 0'a sabitlenir.
//NOT:
//2 nolu uygulamada sensör, ayrı ayrı ana renkler olan RED, GREEN, BLUE üzerindeyken, bunların değerleri 255 veya üzerinde
//çıkıyordu. Sensör, ara renkler olan YELLOW, CYAN, MAGENTA üzerindeyken de bunları oluşturan ana renklerin değeri 255 veya
//üzerinde çıkması gerekiyor. YELLOW ve CYAN'da bu sağlanırken MAGENTA'da R=~255, B=~244 çıkıyor. B ~244 çıktığı için if-else
//ile şart oluştururken bunu göz önünde bulundurmamız gerekti. if-else şartları buna göre yazıldı.
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensor_out 8
int red_ham = 0;
int green_ham = 0;
int blue_ham = 0;
int red_min = 27;
int red_max = 187;
int green_min = 46;
int green_max = 195;
int blue_min = 29;
int blue_max = 144;
int R, G, B;
void setup()
{
Serial.begin(9600);
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensor_out, INPUT);
//sensörün çıkış frekansını %20 olarak ölçeklendirme
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
}
void loop()
{
//kırmızı renk okuma
red_ham = kirmizi_ham_oku();
R = map(red_ham, red_min, red_max, 255, 0);
R = constrain(R, 0, 255);
delay(200);
//yeşil renk okuma
green_ham = yesil_ham_oku();
G = map(green_ham, green_min, green_max, 255, 0);
G = constrain(G, 0, 255);
delay(200);
//mavi renk okuma
blue_ham = mavi_ham_oku();
B = map(blue_ham, blue_min, blue_max, 255, 0);
B = constrain(B, 0, 255);
delay(200);
Serial.print("R = "); Serial.print(R); Serial.print(" | ");
Serial.print("G = "); Serial.print(G); Serial.print(" | ");
Serial.print("B = "); Serial.print(B); Serial.print(" | ");
if (R == 255 & G != 255 & B < 240)
{
Serial.println("Renk = KIRMIZI");
}
else if (R != 255 & G == 255 & B < 240)
{
Serial.println("Renk = YEŞİL");
}
else if (R != 255 & G != 255 & B > 240)
{
Serial.println("Renk = MAVİ");
}
else if (R == 255 & G == 255 & B < 240)
{
Serial.println("Renk = SARI");
}
else if (R != 255 & G == 255 & B > 240)
{
Serial.println("Renk = CYAN");
}
else if (R == 255 & G != 255 & B > 240)
{
Serial.println("Renk = MAGENTA");
}
else if(R==255 & G==255 & B==255)
{
Serial.println("Renk = BEYAZ");
}
else
{
Serial.println("Renk = TANIMLI DEĞİL ");
}
}
int kirmizi_ham_oku()
{
int ham;
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
ham = pulseIn(sensor_out, LOW);
return ham;
}
int yesil_ham_oku()
{
int ham;
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
ham = pulseIn(sensor_out, LOW);
return ham;
}
int mavi_ham_oku()
{
int ham;
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
ham = pulseIn(sensor_out, LOW);
return ham;
}
Devre Şeması


0 comments:
Yorum Gönder