Hola, estoy haciendo un proyecto de aparcamiento automatizado y tomé este código, pero me señala error compilando para la tarjeta Arduino/Genuino UNO, y de paso quería saber si había alguna forma de cambiar lo que está en amarillo puesto que tengo el display de 7 segmentos pero no el decodificador bcd-7segmentos
#include <Servo.h>
#include <Ultrasonic.h>
int const pinBarrera = 2; //Nombre para el pin 2.
int const triggerEntrada = 22; //Nombre para el pin 22.
int const echoEntrada = 23; //Nombre para el pin 23.
int const triggerSalida = 24; //Nombre para el pin 24.
int const echoSalida = 25; //Nombre para el pin 25.
int const numeroPlazas = 3; //Parámetro para definir el número de plazas.
int const distanciaMaximaDeteccion = 20; //Parámetro para definir la distancia máxima a la que se detectarán los coches.
int const anguloApertura = 90; //Parámetro para definir el ángulo de apertura de la valla.
int const anguloCierre = 0; //Parámetro para definir el ángulo de cierre de la valla.
Servo barrera; //Variable de tipo Servo.
Ultrasonic entrada(triggerEntrada, echoEntrada, 2000); //Variable de tipo Ultrasonic para el ultrasónico de entrada, definimos pines y timeout.
Ultrasonic salida(triggerSalida, echoSalida, 2000); //Variable de tipo Ultrasonic para el ultrasónico de entrada, definimos pines y timeout.
int plazasLibres = numeroPlazas; //Almacena las plazas libres del parking.
boolean hayCocheEntrada, hayCocheSalida, alarmaGas; //Almacena el estado correpondiente hay si hay coches en entrada/salida y el estado de la alarma de gas.
void setup() {
for (int i = 2 ; i <= 29 ; i++) {
if (i == 7) i = 22;
pinMode(i, OUTPUT); //Establece el pin i como salida.
}
pinMode(echoEntrada, INPUT); //Establece el pin echoEntrada como entrada.
pinMode(echoSalida, INPUT); //Establece el pin echoSalida como entrada.
barrera.attach(pinBarrera); //Asigna el pin pinBarrera al servomotor.
barrera.write(anguloCierre); //Bajamos la barrera.
}
void loop() {
escribirMarcador(plazasLibres); //Escribe las plazas libres en el siete segmentos.
hayCocheEntrada = entrada.Ranging(CM) <= distanciaMaximaDeteccion; //Si la distancia en el sensor ultrasónico es menor o igual que la distancia maxima de deteccion, hay un coche en la entrada.
hayCocheSalida = salida.Ranging(CM) <= distanciaMaximaDeteccion; //Si la distancia en el sensor ultrasónico es menor o igual que la distancia maxima de deteccion, hay un coche en la salida.
if (hayCocheEntrada) {
if (plazasLibres > 0) {
plazasLibres--;
permitirPaso();
} else denegarAcceso();
}
if (hayCocheSalida) {
permitirPaso();
if (plazasLibres < numeroPlazas) {
plazasLibres++;
}
}
}
void permitirPaso() {
barrera.write(anguloApertura);
tone(piezoElectrico, 2000, 100);
delay(500);
while (hayCocheEntrada || hayCocheSalida) {
hayCocheEntrada = entrada.Ranging(CM) <= distanciaMaximaDeteccion;
hayCocheSalida = salida.Ranging(CM) <= distanciaMaximaDeteccion;
}
delay(1500);
barrera.write(anguloCierre);
delay(1500);
}
void denegarAcceso() {
while (hayCocheEntrada) {
hayCocheEntrada = entrada.Ranging(CM) <= distanciaMaximaDeteccion;
delay(250);
}
}
[color=yellow]/*
Método que escribe el display de siete segmentos.
Puesto que usamos un decodificador BCD-7Segmentos, convertimos el
valor decimal a binario y asignamos los bits a los correspondientes
pines, (MSB Pin 29, LSB Pin 26)
@param El valor decimal a escribir en el display.
*/
void escribirMarcador (byte valorDecimal) {
for (int i = 0 ; i <= 3 ; i++) {
digitalWrite(i + 26, bitRead(valorDecimal, i));
}[/color]
}
void activarAlarma() {
barrera.write(anguloApertura); //Levanta la barrera.
plazasLibres = 0; //Indicamos que no hay plazas libres
escribirMarcador(plazasLibres); //Escribimos en el display de siete segmentos.
delay(100);
}
plazasLibres = numeroPlazas; //Una vez finalizado el estado de alarma las plazas libres pasan a ser el total de plazas del parking.
barrera.write(anguloCierre); //Volvemos a bajar la barrera.
delay(2000);
}