const int LDR=A0;
const int ROJO=9;
const int VERDE=10;
const int AZUL=11;
const int TRIGGER=8;
const int ECHO=7;
int tiempo=0, distancia=0, valorLDR=0;
int valorAzul=0, valorRojo=0, valorVerde=0;
unsigned long tiempoOscuridad=0, tiempoDistancia=0;
bool estadoLDR=false, estadoUltrasonico=false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ROJO, OUTPUT);
pinMode(VERDE, OUTPUT);
pinMode(AZUL, OUTPUT);
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
valorLDR=analogRead(LDR);
Serial.println(valorLDR);
if(valorLDR>=500){ // Si no hay suficiente luz
if(!estadoLDR){ //Verificamos si hay cambio de estado
tiempoOscuridad=millis(); //Guardamos el tiempo de ese cambio de estado
estadoLDR=true;
}
if((millis()-tiempoOscuridad)<5000){ //Obteniendo el tiempo transcurrido desde el ultimo cambio de estado
valorRojo=255;
setColor(valorRojo,valorVerde,valorAzul);
}
else{
setColor(valorRojo,valorVerde,valorAzul);
delay(200);
setColor(0,0,0);
delay(200);
}
}
else{
estadoLDR=false;
valorRojo=0;
setColor(valorRojo,valorVerde,valorAzul);
}
// limpiando el TRIGGER
digitalWrite(TRIGGER,LOW);
delayMicroseconds(2);
// Enviando un pulso de 10 microsegundos al TRIGGER
digitalWrite(TRIGGER,HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER,LOW);
//Leer el tiempo que tarde el ECHO en recibir la onda sonora
tiempo=pulseIn(ECHO, HIGH);
// Calculando la distancia en centimetros
distancia= 0.017* tiempo;
// Mostrando la distancia en el monitor serie
Serial.println("La distancia es: " + String(distancia) + " cm");
if(distancia<=50){
if(!estadoUltrasonico){
tiempoDistancia=millis();
estadoUltrasonico=true;
}
if((millis()-tiempoDistancia)<10000){ //Obteniendo el tiempo transcurrido desde el ultimo cambio de estado
valorAzul=255;
setColor(valorRojo,valorVerde,valorAzul);
}
else{
setColor(valorRojo,valorVerde,valorAzul);
delay(200);
setColor(0,0,0);
delay(200);
}
}
else{
valorAzul=0;
setColor(valorRojo,valorVerde,valorAzul);
}
delay(100);
}
void setColor(int r, int g, int b){
analogWrite(ROJO, r);
analogWrite(VERDE, g);
analogWrite(AZUL, b);
}