Estacionamiento con Control de Pluma
1:17
Explicación breve:Cpp
// Configuración de pines const int sensorEntrada = 2; // Sensor que detecta autos que entran const int sensorSalida = 3; // Sensor que detecta autos que salen const int pluma = 4; // Señal para activar/desactivar la pluma de acceso // Pines del display de 7 segmentos (asumiendo display de cátodo común) const int segPins[7] = {5, 6, 7, 8, 9, 10, 11}; // Matriz con los segmentos a encender para cada dígito (0-9) // Orden de segmentos: a, b, c, d, e, f, g (1 = encendido, 0 = apagado) byte numeros[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 {1, 1, 0, 1, 1, 0, 1}, // 2 {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 1}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 {1, 0, 1, 1, 1, 1, 1}, // 6 {1, 1, 1, 0, 0, 0, 0}, // 7 {1, 1, 1, 1, 1, 1, 1}, // 8 {1, 1, 1, 1, 0, 1, 1} // 9 }; const int capacidadMaxima = 8; // Cupo máximo del estacionamiento int contador = 0; // Cantidad de autos actualmente // Variables para control de rebote (debounce) unsigned long lastDebounceTimeEntrada = 0; unsigned long lastDebounceTimeSalida = 0; const unsigned long debounceDelay = 50; int lastEntradaReading = LOW; int lastSalidaReading = LOW; int entradaState = LOW; int salidaState = LOW; void setup() { // Configuración de pines para sensores y actuadores pinMode(sensorEntrada, INPUT); pinMode(sensorSalida, INPUT); pinMode(pluma, OUTPUT); // Configuración de pines para el display de 7 segmentos for (int i = 0; i < 7; i++) { pinMode(segPins[i], OUTPUT); } actualizarDisplay(); } void loop() { // Lectura y debounce para sensor de entrada int lecturaEntrada = digitalRead(sensorEntrada); if (lecturaEntrada != lastEntradaReading) { lastDebounceTimeEntrada = millis(); } if ((millis() - lastDebounceTimeEntrada) > debounceDelay) { if (lecturaEntrada == HIGH && entradaState == LOW) { // Si se detecta la entrada de un auto if (contador < capacidadMaxima) { contador++; // Incrementa el contador // Activa la pluma (por ejemplo, levanta la barrera) digitalWrite(pluma, HIGH); delay(1000); // Mantener la pluma activa por 1 segundo digitalWrite(pluma, LOW); } // Si ya se alcanzó la capacidad máxima, no se activa la pluma actualizarDisplay(); delay(500); // Pequeña demora para evitar lecturas múltiples } entradaState = lecturaEntrada; } lastEntradaReading = lecturaEntrada; // Lectura y debounce para sensor de salida int lecturaSalida = digitalRead(sensorSalida); if (lecturaSalida != lastSalidaReading) { lastDebounceTimeSalida = millis(); } if ((millis() - lastDebounceTimeSalida) > debounceDelay) { if (lecturaSalida == HIGH && salidaState == LOW) { // Si se detecta la salida de un auto if (contador > 0) { contador--; // Decrementa el contador } actualizarDisplay(); delay(500); } salidaState = lecturaSalida; } lastSalidaReading = lecturaSalida; } void actualizarDisplay() { // Actualiza el display de 7 segmentos para mostrar el valor de "contador" // Se asume que el contador es siempre menor a 10 (solo un dígito) for (int i = 0; i < 7; i++) { digitalWrite(segPins[i], numeros[contador][i]); } }
actualizarDisplay() para refrescar el display de 7 segmentos conectados a los pines 5 al 11.Ready.
Reviews
Inspect
Skilled Azure P.K.E. Meter
Controls
Properties
Availability & Pricing
| Distributor | Qty 1 | |
|---|---|---|
Assets
Welcome 👋
Flux helps you build PCBs faster with an AI teammate!
Create your account to collaborate, stay updated, fork your own version, and get instant answers from our AI agent.