const int pulso =       2; // pulso de activacion para abir y cerrar
const int p_cerrada =   3; // sensor de puerta cerrada
const int p_abierta =   4; // sensor de puerta abierta

const int relaya =      6; // rele de activacion de apertura
const int relayc =      7; // rele de activacion de cerrado


short boton = 1;
short abrir = 1, abrirAnt = 0;
short flag_abre = 0;
short flag_cierra = 0;
short f_c_abrir = 1;
short f_c_cerrar = 1;
int estado, estadoAnt = 0;


void setup() {
  pinMode(pulso, INPUT);          // pulso de activacion para abir y cerrar
  pinMode(p_cerrada, INPUT);      // sensor de puerta cerrada
  pinMode(p_abierta, INPUT);      // sensor de puerta abierta
  pinMode(relaya, OUTPUT);        // rele de activacion de apertura
  pinMode(relayc, OUTPUT);        // rele de activacion de cerrado
  delay(200);
  Serial.begin(115200);
}

void loop() {
    estado = digitalRead(pulso);
    if (estado && !estadoAnt ){
        Serial.println(estado?"Pulsado":"No Pulsado");  
        abrir = 1-abrir;
        if (abrir != abrirAnt) {
            Serial.println(abrir?"Abro":"Cierro");
            delay(50);
        }
        abrirAnt = abrir;
    }
    estadoAnt = estado;

    f_c_abrir = digitalRead(p_abierta);
    f_c_cerrar = digitalRead(p_cerrada);

    //*********************************************************************
    //       RUTINAS PARA LEER LOS FINALES DE CARRERA
    //*********************************************************************
    if (!f_c_abrir) {              // Si se activa el final de carrera de abrir
      if (flag_abre)  {
        digitalWrite(relaya, 0);   // detiene el motor
        boton = 1;
        flag_abre = 0;
      }
    }

    if (!f_c_cerrar) {             // Si se activa el final de carrera puerta cerrada
      if (flag_cierra)      {
        digitalWrite(relayc, 0);   // detiene el motor
        flag_cierra = 0;
        boton = 2;
      }
    }

    //*********************************************************************
    //       RUTINAS PARA ACTIVAR EL MOTOR EN MODO APERTURA O CIERRE
    //*********************************************************************

    if (boton == 1 && !abrir) {    // Si hemos pulsado abrir
      digitalWrite(relayc, 1);     // se activa el motor en modo cierre
      flag_cierra = 1;             // Fija el final de carrera para el motor
    }

    if (boton == 2 && !abrir) {    // si el porton esta cerrado y hemos pulsado abrir
      digitalWrite(relaya, 1);     // activa el motor para abrir
      flag_abre = 1;               // Activa bandera cierra
    }
}