#include <LiquidCrystal.h>
// Definir los pines del LCD
const int rs = 12, en = 13, d4 = 14, d5 = 27, d6 = 26, d7 = 25;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Pines del sensor de color
const int s0 = 19;
const int s1 = 18;
const int out = 15;
const int s2 = 2;
const int s3 = 4;
int red, blue, green, white;
void setup()
{
Serial.begin(9600);
Serial.println("ESP32 COLOR ");
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
// Inicializar el LCD
lcd.begin(16, 2);
lcd.print("BELTRAN");
delay(2000); // Esperar 2 segundos antes de limpiar la pantalla
lcd.clear();
}
void loop()
{
color();
delay(500);
Serial.println();
}
void color()
{
// Leer el color rojo
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
delay(50);
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
// Leer el color azul
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
delay(50);
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
// Leer el color verde
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
delay(50);
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
// Leer el color blanco
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
delay(50);
white = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
// Reconocimiento de colores y visualización en el LCD
lcd.clear();
if(red < blue && red < green) {
Serial.println("color: Red");
lcd.print("Color: Rojo");
}
else if(blue < red && blue < green) {
Serial.println("color: Blue");
lcd.print("Color: azul");
}
else if(green < red && green < blue) {
Serial.println("color: Green");
lcd.print("Color: verde");
}
else if(white < 10) {
Serial.println("color: White");
lcd.print("Color: blanco");
}
else {
Serial.println("color: Not Defined");
lcd.print("Color: no hay");
}
}