#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>
// Definición de pines
#define TRIGGER_PIN1 7
#define ECHO_PIN1 6
#define TRIGGER_PIN2 9
#define ECHO_PIN2 8
#define LED_SUB 2
#define LED_BAJ 3
#define MAX_DISTANCE 200
// Declaración de objetos y variables GLOBALES
NewPing sonar1(TRIGGER_PIN1, ECHO_PIN1, MAX_DISTANCE);
NewPing sonar2(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int pasajeros = 0;
bool s1_activo = false;
bool s2_activo = false;
void actualizarPantalla() {
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.setCursor(11, 0);
lcd.print(pasajeros);
}
void setup() {
pinMode(LED_SUB, OUTPUT);
pinMode(LED_BAJ, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Pasajeros: 0");
}
void loop() {
// Sensor 1 (Entrada)
int dist1 = sonar1.ping_cm();
if (dist1 > 0 && dist1 < 50) {
if (!s1_activo) {
pasajeros++;
actualizarPantalla();
digitalWrite(LED_SUB, HIGH);
delay(800);
digitalWrite(LED_SUB, LOW);
s1_activo = true;
}
} else if (dist1 > 20 || dist1 == 0) {
s1_activo = false;
}
// Sensor 2 (Salida)
int dist2 = sonar2.ping_cm();
if (dist2 > 0 && dist2 < 50) {
if (!s2_activo) {
if (pasajeros > 0) pasajeros--;
actualizarPantalla();
digitalWrite(LED_BAJ, HIGH);
delay(800);
digitalWrite(LED_BAJ, LOW);
s2_activo = true;
}
} else if (dist2 > 20 || dist2 == 0) {
s2_activo = false;
}
delay(100);
}