Ayuda urgente problema con juntar codigos

Buenas a todos. Tengo un problema con un codigo y lo he consultado con un amigo y no hemos encontrado el fallo.

El problema es que en el monitor serialbegin solo aparece lo de "luz" cuando pulso el boton y tendria que ser totalmente independiente de la otra parte. Dejo aqui el codigo a ver si alguien es capaz de ver el fallo.

int LED = 13;    //El LED esta conectado en el pin 9 
int LDR = 0;     //El LDR esta conectador en el pin A0
int brillo;  //variable para el brillo
int luz = 0;       
int valor_sensor = 0;       
const int valor_limite = 50;
const byte pBTN_PUERTA = 2;
const byte pPUERTA     = 3;


void setup()
{
    Serial.begin(9600);    
    pinMode(LED,OUTPUT);
    pinMode(LDR,INPUT);
    pinMode(pBTN_PUERTA, INPUT);
    pinMode(pPUERTA,     OUTPUT);
    
}


void loop()
{
    ////////////////////////////////////////////////////////////////////////////
    //Control de iluminación - Sala Multiusos

  valor_sensor = analogRead(LDR); 
  luz = (5.0 * valor_sensor * 100.0)/1024.0;
  Serial.print(luz);  
  Serial.println(" Luz");             
  delay(300);                       
  
  if (luz <= valor_limite)   //Si el valor de luz es menor o igual que el valor limite
  {
    digitalWrite (LED, HIGH);  //El led se apaga
  }
  if (luz > valor_limite)   //Si es mayor que el valor limite
  {
    digitalWrite (LED, LOW);  //El led se eniende
  }



    ////////////////////////////////////////////////////////////////////////////
    //Apertura y cierre manual - Garaje

    if( digitalRead(pBTN_PUERTA) )
    {
        while(digitalRead(pBTN_PUERTA));
        delay(100);

        digitalWrite(pPUERTA, !digitalRead(pPUERTA));
    }
}

He biscado antes por el foro si habia problemas similares, pero no he encontrado nada.

no utilices byte, usa int

Esto:

        while(digitalRead(pBTN_PUERTA));

es un bucle infinito, mientras pBTN_PUERTA esté en HIGH. Si tienes el botón configurado en pull-up, como sospecho, no pasará a LOW (ni saldrá del bucle) hasta que no pulses el botón. Prueba a cambiar la instrucción a

        while(!digitalRead(pBTN_PUERTA));

Creo que sólo con eso debería acercarse más al funcionamiento deseado.

Limpiado un poco el código, y agregando detección para cambio de estado (si mantengo el pulsador, no esté continuamente abriendo y cerrando):

int LED = 13;    //El LED esta conectado en el pin 9
int LDR = 0;     //El LDR esta conectador en el pin A0
int brillo;  //variable para el brillo
int luz = 0;      
int valor_sensor = 0;      
bool ultimo_estado_pulsador;
const int valor_limite = 50;
const byte pBTN_PUERTA = 2;
const byte pPUERTA     = 3;


void setup()
{
    Serial.begin(9600);    
    pinMode(LED,OUTPUT);
    pinMode(LDR,INPUT);
    pinMode(pBTN_PUERTA, INPUT);
    pinMode(pPUERTA,     OUTPUT);
    ultimo_estado_pulsador=digitalRead(pBTN_PUERTA);
}


void loop()
{
    ////////////////////////////////////////////////////////////////////////////
    //Control de iluminación - Sala Multiusos

  valor_sensor = analogRead(LDR);
  luz = (5.0 * valor_sensor * 100.0)/1024.0;
  Serial.print(luz);  
  Serial.println(" Luz");            
  delay(300);                      
  
  if (luz <= valor_limite)   //Si el valor de luz es menor o igual que el valor limite
  {
    digitalWrite (LED, HIGH);  //El led se apaga
  }
  else // Está claro que si luz no es menor o igual, es que es mayor
  {
    digitalWrite (LED, LOW);  //El led se eniende
  }

  ////////////////////////////////////////////////////////////////////////////
  //Apertura y cierre manual - Garaje
  bool estado_actual_pulsador = digitalRead(pBTN_PUERTA);
  if( estado_actual_pulsador != ultimo_estado_pulsador)
  {
    if (estado_actual_pulsador == HIGH) // LOW, si lo tienes conectado como pullup
      digitalWrite(pPUERTA, !digitalRead(pPUERTA));
  }
}

@cocoloco8 donde dices que no use byte?

Moderador: Edita el titulo @Dinocrisis