// ===== ПИНЫ =====
#define RED_PIN 3
#define GREEN_PIN 5
#define BLUE_PIN 6
#define LDR_PIN A0
// ===== НАСТРОЙКИ =====
#define SAMPLES 5 // сколько раз измеряем и усредняем
#define THRESHOLD 40 // минимальная разница между цветами
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
Serial.begin(9600);
Serial.println("Color detection started...");
}
// ===== ФУНКЦИЯ ИЗМЕРЕНИЯ СВЕТА =====
int readLight(bool r, bool g, bool b) {
digitalWrite(RED_PIN, r);
digitalWrite(GREEN_PIN, g);
digitalWrite(BLUE_PIN, b);
delay(200); // ждём стабилизацию света
int sum = 0;
for (int i = 0; i < SAMPLES; i++) {
sum += analogRead(LDR_PIN);
delay(10);
}
// выключаем свет после измерения
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
return sum / SAMPLES;
}
void loop() {
// ===== СЧИТЫВАЕМ RGB =====
int redValue = readLight(true, false, false);
int greenValue = readLight(false, true, false);
int blueValue = readLight(false, false, true);
// ===== ВЫВОД ЗНАЧЕНИЙ =====
Serial.print("R: ");
Serial.print(redValue);
Serial.print(" | G: ");
Serial.print(greenValue);
Serial.print(" | B: ");
Serial.println(blueValue);
// ===== ОПРЕДЕЛЕНИЕ ЦВЕТА =====
if (redValue > greenValue + THRESHOLD &&
redValue > blueValue + THRESHOLD) {
Serial.println("Detected Color: RED");
}
else if (greenValue > redValue + THRESHOLD &&
greenValue > blueValue + THRESHOLD) {
Serial.println("Detected Color: GREEN");
}
else if (blueValue > redValue + THRESHOLD &&
blueValue > greenValue + THRESHOLD) {
Serial.println("Detected Color: BLUE");
}
else {
Serial.println("Detected Color: UNKNOWN");
}
Serial.println("-----------------------------");
delay(2000);
}