// incluir libreria
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);//Declaramos los pines que usa nuestra pantalla(RS,E,D4,D5,D6,D7)
// Pines para colocacion de led (omitir para este ejemplo)
int LED13 = 13;
int LED12 = 12;
// Pines sensor izquierdo
int Trigger_izq = 11;
int Echo_izq = 10;
// pines sensor derecho
int Trigger_der = 3;
int Echo_der = 2;
// Variables sensor izquierdo
int izquierdo = 0;
int izquierdo_cuenta = 0;
int izquierdo_anterior = 0;
int izquierdo_ahora = 0;
int izquierdo_duracion,izquierdo_distancia;
// Variables sensor derecho
int derecho = 0;
int derecho_cuenta = 0;
int derecho_anterior = 0;
int derecho_ahora = 0;
int derecho_duracion,derecho_distancia;
void setup() {
//Declaramos pines de leds como salidas (omitir)
pinMode(LED13, OUTPUT);
pinMode(LED12, OUTPUT);
// Inicializar el LCD
lcd.init();
//Encender la luz de fondo.
lcd.backlight();
// Se declaran los pines sensor izquierdo como Entradas/Salidas
pinMode(Trigger_izq, OUTPUT);
pinMode(Echo_izq, INPUT);
// Se declaran los Pines sensor derecho como Entradas/Salidas
pinMode(Trigger_der, OUTPUT);
pinMode(Echo_der, INPUT);
// Iniciamos Monitor serie
Serial.begin(9600);
}
void loop(){
// Ubicamos Texto en Pantalla
lcd.setCursor(0, 0);//Situamos el lugar donde escribiremos
lcd.print("Cont.Ultasonico");//Escribimos contador
lcd.setCursor(3, 1);//Situamos el lugar donde escribiremos
lcd.print(izquierdo_cuenta);//Representamos la variable Conteo sensor de la izquierda
delay(100);
// Variables Para medir distancia con sensor izquierdo
digitalWrite (Trigger_izq, HIGH);
delayMicroseconds (10);
digitalWrite (Trigger_izq, LOW);
izquierdo_duracion = pulseIn (Echo_izq, HIGH);
izquierdo_distancia = (izquierdo_duracion/2) / 29.1;
if (izquierdo_distancia < 20) { // Condicion de funcionamiento si Se esta a menos de 20 activa izquierdo.
izquierdo = HIGH;
digitalWrite (LED13, HIGH);// Led se enciende cuando se activa el sensor ( opcional)
}
else {
izquierdo = LOW;
digitalWrite (LED13, LOW); // Led se apaga cuando se no esta activo el sensor
}
izquierdo = digitalRead(LED13);
if (izquierdo == HIGH) { // Comprueba si se ha activado izquierdo.
izquierdo_ahora = 1;
}
else {
izquierdo_ahora = 0;
}
if(izquierdo_ahora != izquierdo_anterior){
if(izquierdo_ahora == 1){
izquierdo_cuenta = izquierdo_cuenta + 1; // Si se compreba la activacion del sensor izquierdo entonces contador izquierdo incrementa +1
Serial.print("izquierdo_cuenta: ");
Serial.println(izquierdo_cuenta);
}
}
izquierdo_anterior = izquierdo_ahora;
delay(100);
// Variables sensor derecho
digitalWrite (Trigger_der, HIGH);
delayMicroseconds (10);
digitalWrite (Trigger_der, LOW);
derecho_duracion = pulseIn (Echo_der, HIGH);
derecho_distancia = (derecho_duracion/2) / 29.1;
if (derecho_distancia < 20) { //Condicion de funcionamiento si Se esta a menos de 20 activa Derecho.
derecho = HIGH;
digitalWrite (LED12, HIGH); // Si se activa sensor derecho se enciende diodo Led (Opcional)
}
else {
derecho = LOW;
digitalWrite (LED12, LOW); // Led se apaga cuando se no esta activo el sensor
}
derecho = digitalRead(LED12);
if (derecho == HIGH) { // Comprueba activado derecho.
derecho_ahora = 1;
}
else {
derecho_ahora = 0;
}
if(derecho_ahora != derecho_anterior){
if(derecho_ahora == 1){
izquierdo_cuenta = izquierdo_cuenta - 1; // Si se compreba la activacion del sensor Derecho entonces contador izquierdo Decrementa -1
Serial.print("izquierdo_cuenta: "); // Mostramos texto en monitor serie
Serial.println(izquierdo_cuenta); // Mostramos valor del contador en monitor serie
}
}
derecho_anterior = derecho_ahora;
if (izquierdo_cuenta < 0) { // Si el contador Izquierdo tiene valor 0 entonces permanecera siendo 0, para evitar conteo negativo de sensor derecho
izquierdo_cuenta=0;
}
if (izquierdo_cuenta>99) { // Limitamos nuestro contador, valor maximo de 100
izquierdo_cuenta=100;
}
if (izquierdo_cuenta < 10) { // si el valor es menor a 10, entonces el 0 es borrado, su posicion para este caso es la 4,1 en el lcd
lcd.setCursor(4, 1),lcd.print(" "); // este es un defecto de codigo ya que de lo contrario el 0 permanecera en pantalla cuando bajemos a 9 se mostrara 90,80,70, etc.
}
if (izquierdo_cuenta < 100) { // Es la misma condicion para el valor de 10, ya que el segundo 0 para el caso de 100 tambien se queda en pantalla al bajar a 99
lcd.setCursor(5, 1),lcd.print(" "); // se elimina al ser menor a 100, el segundo 0, su posicion es la 5,1 en el LCD
}
}