unificar dos programas en uno

Buenas; quiero juntar dos códigos en uno, el primero es para encendido y apagado de luces automático, y el segundo es el control de un parking.

código del parking:

#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 %.

//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[10] = {
// pgfedcba  <--- segmentos
  B11000000, // numero 0
  B11111001, // numero 1
  B10100100, // numero 2
  B10110000, // numero 3
  B10011001, // numero 4
  B10010010, // numero 5
  B10000010, // numero 6
  B11111000, // numero 7
  B10000000, // numero 8
  B10010000  // numero 9
};

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

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);
}

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);
    }
  }


}

// 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) );
}

Código encendido luces:

int valor = 0;  //Variable recibida por el LDR.
int led_pin = 10; // Pin de salida a LEDS
int analogica = A2; // Pin del LDR 

void setup(){
  Serial.begin(9600); 
  pinMode(led_pin, OUTPUT); 
}

void loop(){

  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(led_pin, HIGH); 
  } else{                       
    digitalWrite(led_pin, LOW); 
    } 
}

por separado me funcionan perfectamente, pero algo hago mal que al juntarlos no me funciona correctamente,

Código unificado

#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 
int rojo = 7; // Pin semáforo rojo
int verde = 13; // Pin semáforo verde

//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) );
}

Pero no dices que es lo que no funciona. No funciona la presentación? Se debe al uso de los delays. No funciona la lectura de las barreras? delays de nuevo.

Barreras con delays no van.. ya te lo dije antes. Es mas, no has considerado lo que te puse en el otro caso. Una barrera va a terminar rompiendo el techo de un vehículo si sigues con este código. Tienes que asegurarte que NADA accione la barrera hasta completar la salida o entrada de un vehículo.

Edito: he visto tu código, ordené algunas cosas que no le hacen porque esta bien. Que es lo que no funciona?

surbyte lo de las barreras en el proyecto diré que van con los sensores, es solo para hacer una maqueta para presentar el proyecto, que es para el fin de curso, lo que tu me dices lo tengo en mente, si me llegarán los sensores antes de presentarlo se los pondré, pero si no para demostración me vale, porque en teoría no tengo porque hacer la maqueta, pero me gustaría llevarla para exponer.

Lo que no me funciona es el display de 7 segmentos, no sé porque no me los representa bien si, sólo con el código si me va bien, pero al juntar los dos, deja de hacerlo bien, por eso creo que debe ser algún error en la programación al unirlos, algo que al juntarlos hago mal porque el programa no es capaz de ejecutarlo.

A ver si alguien sabe que pasa en el código, después subiré un video para enseñar como me hace el programa.

Gracias surbyte, y a ver si ves luego el video y se te ocurre que me pasa

[u]video:[/u]

https://youtu.be/_l_XZL2D7ZM

Olvidé lo de la maqueta. Perdona!
Estoy viendo y simulando tu proyecto

Te confirmo que el código funciona perfecto.
Mas alla de que yo hice algunos cambios menores, lo tuyo esta correcto.
Cambie pines 0 y 1 a A0 y A1 para que pudiera ver el monitor serie.
Solo para poder ver en el Serial.
SI no lo usas no lo inicialices.
Quita en el setup Serial.begin(9600);
Quita en el loop Serial.Println(valor);
eso debe alterar tu display

#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 luces 	  10 		 // Pin de salida a LEDS
#define Salida     9         // Pin conectado al botón de salir.
#define Entrada    8         // Pin conectado al botón de entrar.
#define rojo 	   7 		 // Pin semáforo rojo
#define verde	  13	     // Pin semáforo verde
#define analogica A2 		 // Pin del LDR 

#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 %.
#define BRIGHTNESS  (255 * INTEN /100)

int valor 		= 0;  		 // Variable recibida por el LDR.

//Pines conexiones a los segmentos (catodos).
#define  segA  A0
#define  segB  A1
#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_PULLUP);           
  pinMode(Entrada, INPUT_PULLUP);          
  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, BRIGHTNESS);
  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)) {
		Serial.println("Entrada");
		if(Available != 0){
		    Available--;
		    Serial.println(Available);
		    myservo.write(BarAb);
		    delay(3000);
		    myservo.write(BarCer);
		}
	}
	
	if (!digitalRead(Salida)) {
		Serial.println("Salida");
	    if (Available != CAPACIDAD) {
		    Available++;
	    	Serial.println(Available);		    
		    myservo.write(BarAb);
		    delay(3000);
		    myservo.write(BarCer);
	    }
	}

	valor = analogRead(analogica); // El valor recibido por el LDR lo guardamos en la vaiable.
	//.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) );
}

Ok surbyte, lo probaré a ver si me va, es que lo del puerto serie era para comunicarlo con un scada que voy a hacer, pero al final compré un ethernet y haré por tcp/ip, pero me interesaba que funcionará el código sólo y luego ya pelearme con la comunicación.

Gracias surbyte.

Bueno pero yo te mostré que puedes usar A0..A5 sin problemas. como salidas. Uso 0 y 1 cuando el proyecto esta terminado.

surbyte funciona perfectamente, gracias por tu ayuda, no sabía que afectará el rx y tx tanto.

Bien. Edita y agrega solucionado al titulo