Gracias de nuevo Surbyte.
Aclarado el asunto de la alimentación.
Me gustaría mejorar el código en los siguientes puntos:
1- Que ambas lecturas sean simultáneas.
2- Que tome como referencia la lectura de menor valor (distancia).
3- Que el testigo sólo muestre la lectura de menor valor.
CODE:
// Pins de Derecha
const int trigger_d = 9;
const int echo_d = 8;
// Pins de Izquierda
const int trigger_i = 6;
const int echo_i = 7;
// Pins del testigo
const int buzzer = 5;
const int verde = 4;
const int amarillo = 3;
const int rojo = 2;
void setup()
{
Serial.begin(9600);
// Configuración de los pines
pinMode(trigger_d, OUTPUT);
pinMode(echo_d, INPUT);
pinMode(verde, OUTPUT);
pinMode(amarillo, OUTPUT);
pinMode(rojo, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(trigger_i, OUTPUT);
pinMode(echo_i, INPUT);
}
void loop()
{
float distancia;
// Medida derecha
distancia = medida(trigger_d, echo_d);
// Devuelve el resultado vía UART
Serial.print("Derecha: ");
Serial.println(distancia);
//Condiciones del testigo
//Condicion 1 alarma
if (distancia < 40) {
digitalWrite(rojo, HIGH);
delay(150);
tone (5, 3600, 200);
}
else {
digitalWrite(verde, LOW);
digitalWrite(amarillo, LOW);
}
// condicion 2 precaucion
if (distancia >= 40 && distancia <= 80) {
digitalWrite(amarillo, HIGH);
delay(150);
tone (5, 250, 50);
}
else {
digitalWrite(verde, LOW);
digitalWrite(rojo, LOW);
}
// condicion 3 calma
if (distancia >80) {
digitalWrite(verde, HIGH);
}
else {
digitalWrite(amarillo, LOW);
digitalWrite(rojo, LOW);
}
delay(300);
// Medida izquierda
distancia = medida(trigger_i, echo_i);
// Devuelve el resultado vía UART
Serial.print("Izquierda: ");
Serial.println(distancia);
//Condiciones del testigo
//Condicion 1 alarma
if (distancia < 40) {
digitalWrite(rojo, HIGH);
delay(150);
tone (5, 3600, 200);
}
else {
digitalWrite(verde, LOW);
digitalWrite(amarillo, LOW);
}
//Condicion 2 precaucion
if (distancia >= 40 && distancia <= 80) {
digitalWrite(amarillo, HIGH);
delay(150);
tone (5, 250, 50);
}
else {
digitalWrite(verde, LOW);
digitalWrite(rojo, LOW);
}
//Condicion 3 calma
if (distancia >80) {
digitalWrite(verde, HIGH);
}
else {
digitalWrite(amarillo, LOW);
digitalWrite(rojo, LOW);
}
delay(300);
}
float medida(int trigger, int echo) // Función de ejecución de medida
{
// Trigger inicial
digitalWrite(trigger, LOW);
delayMicroseconds(5);
// Comienzo de la medida
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
// Adquisición y conversión a metros
float distancia = pulseIn(echo, HIGH);
distancia = distancia * 0.01657;
return distancia;
}
// A mejorar:
// 1- Que las dos lecturas sean simultáneas.
// 2- Que sólo tome el valor de la lectura menor.
// 3- Que la lectura menor sea reflejada en el testigo.
Gracias!!