ayuda!!!! parking controlado por arduino

Hola, soy nuevo en el foro, tengo un problema con el proyecto que estoy realizando, se trata de un parking, el cual, lo mítico, dispone de 8 plazas,si está vacío el 7 segmentos marca 8 plazas libres y la barrera si alguien quiere entrar se abre, en cuanto ya no quedan plazas la barrera no deja acceder ningún coche hasta que no salga uno.

pero además de eso, también quiero controlar el encendido de farolas automáticamente cuando se haga de noche, uso un ldr para ello, el problema es que mi programa al ejecutarlo el 7 segmentos no me señaliza bien los números, y si le quito la programación del ldr me los ejecuta bien, ¿alguien me puede echar una mano?

mi código:

#include <Servo.h>
Servo myservo; // creamos un objeto servo para controlar el servo

#define ServoM 12 //Pin conectado con el servomotor.
#define Brillo 11 //biblioteca servo, desactiva PWM de los pines 9 y 10.
#define Salida 9 //Pin conectado al botón de salir.
#define Entrada 8 //Pin conectado al botón de entrar.

#define BarCer 177 //posicion barrera cerrada.
#define BarAb 95 //posicion barera abierta.
#define CAPACIDAD 8 //Capacidad del parking (coches).
#define INTEN 80 //Intensidad del display en %.
int valor = 0; //Variable recibida por el LDR.
int luces = 10; // Pin de salida a LEDS
int analogica = A2; // Pin del LDR

//Pines conexiones a los segmentos (catodos).
#define segA 0
#define segB 1
#define segC 2
#define segD 3
#define segE 4
#define segF 5
#define segG 6

//Matriz con los segmentos para representar los numeros decimales del 0 al 8.
byte segments[9] = {
// pgfedcba <--- segmentos
B11000000, // number 0
B11111001, // number 1
B10100100, // number 2
B10110000, // number 3
B10011001, // number 4
B10010010, // number 5
B10000010, // number 6
B11111000, // number 7
B10000000, // number 8
};

//---------------------------------

void setup(){
myservo.attach(ServoM);

pinMode(Salida, INPUT);
pinMode(Entrada, INPUT);
digitalWrite(Salida, HIGH);
digitalWrite(Entrada, HIGH);
pinMode(segA,OUTPUT);
pinMode(segB,OUTPUT);
pinMode(segC,OUTPUT);
pinMode(segD,OUTPUT);
pinMode(segE,OUTPUT);
pinMode(segF,OUTPUT);
pinMode(segG,OUTPUT);
pinMode(Brillo,OUTPUT);
analogWrite(Brillo,255*INTEN/100);
myservo.write(BarCer); //Barrera en la posicion bajada
// delay(1000);
Serial.begin(9600);
pinMode(luces, OUTPUT);

}

int Available= 8; // Numero de plazas disponibles.

//--------------------------------------------------
void loop(){
Display(Available);
if(digitalRead(Entrada)==0)
{
if(Available != 0){
Available--;
myservo.write(BarAb);
delay(3000);
myservo.write(BarCer);
}
}
if(digitalRead(Salida)==0)
{
if(Available != CAPACIDAD){
Available++;
myservo.write(BarAb);
delay(3000);
myservo.write(BarCer);
}
}

valor = analogRead(analogica); // El valor recibido por el LDR lo guardamos en la vaiable.
Serial.println(valor); // Valor será mostrado no Serial Monitor, para calibrar el encendido del LED de iluminación
delay(250); // Pausa de 250 ms.

if (valor < 150)
{
digitalWrite(luces, HIGH);
} else{
digitalWrite(luces, LOW);
}

}

// Ponemos los segmentos de acuerdo al numero de plazas libres.

void Display(int number){
byte segs = ~segments[number]; //"~" se usa para el anodo comun.

digitalWrite(segA, bitRead(segs, 0) );
digitalWrite(segB, bitRead(segs, 1) );
digitalWrite(segC, bitRead(segs, 2) );
digitalWrite(segD, bitRead(segs, 3) );
digitalWrite(segE, bitRead(segs, 4) );
digitalWrite(segF, bitRead(segs, 5) );
digitalWrite(segG, bitRead(segs, 6) );
}

Hola Monje, es tu primer post en este foro y lamento tener que regañarte por estas cosas:

  1. Lee las Normas del foro
  2. Presta debida atención a como se usan los tags para insertar códigos. Muchos no respondemos estos mensajes cuando no son posteados debidamente. Este es el tag que debes usar </> y debes editar tu post para usarlo. El punto 7 dice como hacerlo
  3. Edita también tu título. No puedes usar la palabra AYUDA. Punto 4 de las Normas del foro.

Respuesta a tu consulta:
Si todo lo estas alimentando con el Arduino yo creo que posiblemente se este quedando sin corriente al momento de alimentar display mas servo y luego accionar el relé de las LUCES.
Prueba a ver si todo funciona bien pero sin que no haya consumos importantes.
Algo mas, tienes resistencia limitadora entre los segmentos y los pines del arduino?

Veo un potencial problema. Asignas 3 segundos para que un vehículo sea detectado y supere la barrera. Que pasa si se detiene.
La barrera cae encima del auto?
Mira ese tema con detenimiento.
Deberías poner barreras IR entre el punto de entrada y un punto luego de la barrera. Este punto determina que el auto ya pasó la barrera y puedes bajarla con seguridad si otro auto no viene justo detrás.
Lo mismo al salir.
Es decir.. barrera IR antes de la barrera físicia que controlas con el servo. y otra despues.
Entoces si se activa la 1 y luego la dos el auto entra, si es al revés sale.
Asi no le tiras ninguna barrera física a ningún vehículo y te ahorras unos pesos/euros.

lo siento surbyte, ahora lo borro y lo creo de nuevo bien, porque no encuentro donde modificar el post.