Read the TCS3200 color sensor with an Arduino
FunduinoLast updated on
Rot, Grün und Blau erkennen und mit drei LEDs anzeigen
Material
Wie der TCS3200 Farben erkennt
Aufbau und Verkabelung
Die Steuerpins S0 bis S3
Farben erkennen und LEDs schalten
1 / 4
Sketch: Farben erkennen und LEDs schalten
const int s0 = 8; // Verbindung der Farbsensorkontakte mit dem Arduino festlegen
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;
int roteLED = 2; // Verbindung der LEDs mit dem Arduino festlegen
int grueneLED = 3;
int blaueLED = 4;
int rot = 0; // Variablen fuer die drei Messwerte
int gruen = 0;
int blau = 0;
void setup()
{
Serial.begin(9600); // Serielle Kommunikation starten
// s0 bis s3 sind Eingaenge DES SENSORS. Der Arduino gibt darauf aus,
// deshalb sind sie hier OUTPUT. out ist der Ausgang des Sensors,
// den der Arduino liest, deshalb INPUT.
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
pinMode(roteLED, OUTPUT); // Die LEDs werden als Ausgang festgelegt
pinMode(grueneLED, OUTPUT);
pinMode(blaueLED, OUTPUT);
// s0 und s1 stellen die Ausgangsfrequenz des Sensors ein.
// HIGH/HIGH bedeutet 100 Prozent - das ist die empfindlichste Einstellung.
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop()
{
color(); // Diese Funktion steht am Ende des Sketches
Serial.print(" Wert Rot: ");
Serial.print(rot);
Serial.print(" Wert Gruen: ");
Serial.print(gruen);
Serial.print(" Wert Blau: ");
Serial.print(blau);
// Je kuerzer der gemessene Impuls, desto mehr von dieser Farbe ist vorhanden.
// Der kleinste der drei Werte gewinnt.
if (rot < blau && rot < gruen && rot < 20)
{
Serial.println(" - (Rote Farbe)");
digitalWrite(roteLED, HIGH);
digitalWrite(grueneLED, LOW);
digitalWrite(blaueLED, LOW);
}
else if (blau < rot && blau < gruen)
{
Serial.println(" - (Blaue Farbe)");
digitalWrite(roteLED, LOW);
digitalWrite(grueneLED, LOW);
digitalWrite(blaueLED, HIGH);
}
else if (gruen < rot && gruen < blau)
{
Serial.println(" - (Gruene Farbe)");
digitalWrite(roteLED, LOW);
digitalWrite(grueneLED, HIGH);
digitalWrite(blaueLED, LOW);
}
else
{
Serial.println();
}
delay(300);
}
// Hier werden die Werte vom Farbsensor ausgelesen.
// s2 und s3 waehlen aus, welcher Farbfilter gerade gemessen wird.
void color()
{
digitalWrite(s2, LOW); // s2 LOW, s3 LOW -> roter Filter
digitalWrite(s3, LOW);
rot = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH); // s2 LOW, s3 HIGH -> blauer Filter
blau = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH); // s2 HIGH, s3 HIGH -> gruener Filter
gruen = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}Rate the instructions