Sensores de infrarrojo

Hola buenas, tengo un problema , resulta que he hecho una maqueta de una casa domotizada para un proyecto, tengo una puerta de garage que abro y cierro a traves de bluethooth , el problema es que que he puesto un sensor de infrarrojos a cada lado de la puerta para que sepa cuando pararse al abrirse y otro al cerrarse. cuando se cierra pues el infrarrojo lo detecta y se para, pero como se mantiene detectado pues no se puede abrir, y lo mismo pasa al contrario. No sé como hacer para que se pare cuando lo detecte pero a la vez se pueda seguir moviendo el servo.

#include <Servo.h>
const int inf = 52;  // infrarrojo 1
const int servo = 10;
const int inf1 = 53;  //infrarrojo 2 
Servo garage;
int valor = 0;
int valor1 = 0;
void setup()
{
 pinMode (inf , INPUT);
pinMode (inf1 , INPUT);
  garage.attach(10);  
 
  pinMode(servo,OUTPUT);
  pinMode(11,OUTPUT);
 Serial.begin(9600);
}

void loop()
{
 valor1 = digitalRead(inf1);
  valor = digitalRead(inf);
  
      if (valor == 0)
       {
garage.write(90);

   }
   
if  (valor1 == 0)
{
garage.write(90);


   }
  

 while (Serial.available())
 {
   char dato= Serial.read(); 
   digitalWrite(6,LOW); 
   switch(dato)
   {

       case 'S': 
       {
       garage.write(120);
 
       break;
   }
      case 'Z': 
      {
       
       garage.write(60);
    break;
     
  
      }
      
 }
 }

Moderador: Código editado con etiquetas

Hola buenas, tengo un problema , resulta que he hecho una maqueta de una casa domotizada para un proyecto, tengo una puerta de garage que abro y cierro a traves de bluethooth , el problema es que que he puesto un sensor de infrarrojos a cada lado de la puerta para que sepa cuando pararse al abrirse y otro al cerrarse. cuando se cierra pues el infrarrojo lo detecta y se para, pero como se mantiene detectado pues no se puede abrir, y lo mismo pasa al contrario. No sé como hacer para que se pare cuando lo detecte pero a la vez se pueda seguir moviendo el servo. El servo es de continua, por lo que a 90 esta parado a 60 gira hacia un lado y a 120 gira hacia el otro, la puerta no se cuanto pesa , he dicho que es una maqueta ( de cartón pluma) por lo tanto la puerta pesará 10 gramos que se yo. Si , la puerta es corredera, utilicé la barra engranada de un lector de CD y pegué un engranaje al servo para que cuando se mueva engrane con la puerta y ésta se mueva a través de una guía y blablabla.... Si el problema no es mover la puerta. En principio paraba la puerta utilizando un delay y mas o menos calculando cuanto tardaba en abrirse o cerrase, pero de este mode al abrirla 3 o 4 veces acaba descordinandose y se queda medio abierta o medio cerrada, asi que decidi comprar sensores de infrarrojos pero veo que no hay forma humana de hacerlo funciona, creo que tenia q haber comprado finales de carrera porque creo que los infrarrojos no sirven para esta función. Pero por si acaso yo lo pregunto

#include <Servo.h>
const int inf = 52;  // infrarrojo 1
const int servo = 10;
const int inf1 = 53;  //infrarrojo 2 
Servo garage;
int valor = 0;
int valor1 = 0;
void setup()
{
pinMode (inf , INPUT);
pinMode (inf1 , INPUT);
 garage.attach(10);  

 pinMode(servo,OUTPUT);
 pinMode(11,OUTPUT);
Serial.begin(9600);
}

void loop()
{
valor1 = digitalRead(inf1);
 valor = digitalRead(inf);
 
     if (valor == 0)
      {
garage.write(90);

  }
  
if  (valor1 == 0)
{
garage.write(90);


  }
 

while (Serial.available())
{
  char dato= Serial.read(); 
  digitalWrite(6,LOW); 
  switch(dato)
  {

      case 'S': 
      {
      garage.write(120);

      break;
  }
     case 'Z': 
     {
      
      garage.write(60);
   break;
    
 
     }
     
}
}

Crea una variable booleanda (doorOpen por ejemplo), true para abierta y false para cerrada, las seteas segun el caso y listo, supongamos que esta abierta (doorOpen = true) empezaras a cerrarla, al cerrar doorOpen = false, cuando quieras abrirla de nuevo, entonces asi no importa que el sensor quede activado o no, porque la apertura o cierre solo dependera del estado de la variable.