#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Pines para la pantalla LCD
const int trigPin = 3;
const int echoPin = 2;
const int ledPinGreen1 = 10; // Pin para la luz verde 1
const int ledPinGreen2 = 11; // Pin para la luz verde 2
const int ledPinRed = 12; // Pin para la luz roja
const int bzPin = 13; // Pin para el zumbador
const int btnPin = 2; // Pin para el botón
int totalPasajeros = 0;
bool busLleno = false;
int lastBtnState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPinGreen1, OUTPUT);
pinMode(ledPinGreen2, OUTPUT);
pinMode(ledPinRed, OUTPUT);
pinMode(bzPin, OUTPUT); // Establecer el pin del zumbador como salida
pinMode(btnPin, INPUT_PULLUP); // Establecer el pin del botón como entrada con pull-up
lcd.begin(16, 2); // Inicialización de la pantalla LCD
lcd.print("Pasajeros: ");
}
void loop() {
actualizarBoton();
if (!busLleno) {
// Encender luz verde en ambos LEDs
digitalWrite(ledPinGreen1, HIGH);
digitalWrite(ledPinGreen2, HIGH);
// Emitir sonido de una gota
emitirSonidoGota();
// Parpadear la luz verde 5 veces
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinGreen1, HIGH);
digitalWrite(ledPinGreen2, HIGH);
delay(200);
digitalWrite(ledPinGreen1, LOW);
digitalWrite(ledPinGreen2, LOW);
delay(200);
}
} else {
// Encender luz roja
digitalWrite(ledPinRed, HIGH);
// Emitir sonido de bus lleno
emitirSonidoBusLleno();
}
delay(500); // Pequeña pausa para estabilidad
}
void actualizarBoton() {
int btnState = digitalRead(btnPin);
if (btnState != lastBtnState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (btnState != lastBtnState) {
if (btnState == LOW) {
if (!busLleno) {
totalPasajeros++;
actualizarLCD();
}
}
lastBtnState = btnState;
}
}
}
void actualizarLCD() {
lcd.setCursor(11, 0);
lcd.print(" "); // Limpiar el número anterior
lcd.setCursor(11, 0);
lcd.print(totalPasajeros);
}
void emitirSonidoGota() {
// Tono que simula el sonido de una gota
tone(bzPin, 1500, 50); // Frecuencia alta para simular el sonido de una gota
delay(100); // Esperar un poco antes de volver al bucle principal
}
void emitirSonidoBusLleno() {
// Nuevo sonido agregado (tono agradable y tecnológico)
tone(bzPin, 2000, 500); // Frecuencia más alta para simular un sonido más agradable y tecnológico
delay(500); // Esperar un poco antes de volver al bucle principal
}