Problemas con el uso de entradas y salidas

Buen día, realice una placa que ya tiene un tiempo de funcionar bastante bien, consta de 4 entradas para sensores del tipo dipswitch, 4 salidas y 1 salida de alarma (esta ultima la agregue recién)
les copio el programa , y necesito si alguien me puede ayudar..
El funcionamiento es sensillo, cuando detecta un sensor(puerta) abierta las otras 3 puertas restantes se tienen que cerrar y la puerte que tiene ese sensor permanece liberada (low)
y asi con todas las puertas.
Tengo un jumper que selecciona el modo de las 4 juntas o 2 por un lado y 2 por otro
lo que quiero incorporar es que si una puerta esta abierta y el resto trabado y supera los 20 segundos active una salida de alarma, independientemente del funcionamiento, , cuando esta puerta se cerró , el sistema se pone en espera y la alarma se apaga hasta censar la proxima abertura.

ahi va el codigo

// CENTRAL 4 + ALARMA

byte ledPin8 = 8;
byte ledPin9= 9;
byte ledPin10 = 10;
byte ledPin11 = 11;
byte ledPin12 = 12;
byte ledpin13 = 13;
byte sensorpin1 =1;
byte sensorpin2 =2;
byte sensorpin3 =3;
byte sensorpin4 =4;
byte sensormodo =6;

byte buttonState1 = 0;
byte buttonState2 = 0;
byte buttonState3 = 0;
byte buttonState4 = 0;
byte modo = 0;

unsigned long t;

void setup() {

// pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin12, OUTPUT);

pinMode(sensorpin1, INPUT);
pinMode(sensorpin2, INPUT);
pinMode(sensorpin3, INPUT);
pinMode(sensorpin4, INPUT);
// pinMode(sensorpin5, INPUT);
// pinMode(sensorpin6, INPUT);
pinMode (sensormodo, INPUT);

pinMode(LED_BUILTIN, OUTPUT);

digitalWrite(ledpin13, HIGH);
delay(1000);
digitalWrite(ledpin13, LOW);
delay(1000);
digitalWrite(ledpin13, HIGH);
delay(50);
digitalWrite(ledpin13, LOW);
delay(200);

}

void loop() {

buttonState1 = digitalRead(sensorpin1);
buttonState2 = digitalRead(sensorpin2);
buttonState3 = digitalRead(sensorpin3);
buttonState4 = digitalRead(sensorpin4);
//buttonState5 = digitalRead(sensorpin5);
modo = digitalRead(sensormodo);

if (modo == HIGH)
{

                // SI ESTA EL PIN DETECTANDO NIVEL ALTO
                // GRUPO  PUERTAS EN MODO TOTAL 

if (buttonState1 == LOW) {
// PUERTA 1 ABIERTA
digitalWrite(ledPin12, LOW);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin9, HIGH);
//alarma();
}

} else if (buttonState2 == LOW) {
// PUERTA 2 ABIERTA
digitalWrite(ledPin12, HIGH);
digitalWrite(ledPin11, LOW);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin9, HIGH);

} else if (buttonState3 == LOW) {
// PUERTA 3 ABIERTA
digitalWrite(ledPin12, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin9, HIGH);

} else if (buttonState4 == LOW) {

 //  PUERTA 4 ABIERTA
  digitalWrite(ledPin12, HIGH);
 digitalWrite(ledPin11, HIGH);
 digitalWrite(ledPin10, HIGH);
 digitalWrite(ledPin9, LOW);

} else{
// PUERTAS LIBERADAS
digitalWrite(ledPin12, LOW);
digitalWrite(ledPin11, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin9, LOW);

}

if (modo == LOW)
{
//SI ESTA EL PIN DETECTANDO NIVEL BAJO
// GRUPO PUERTAS EN MODO 2 + 2

if (buttonState1 == LOW) {
// PUERTA 1 ABIERTA
digitalWrite(ledPin12, LOW);
digitalWrite(ledPin11, HIGH);

} else if (buttonState2 == LOW) {
// PUERTA 2 ABIERTA
digitalWrite(ledPin12, HIGH);
digitalWrite(ledPin11, LOW);

 }
 
else{
 // PUERTAS LIBERADAS
 digitalWrite(ledPin12, LOW);
 digitalWrite(ledPin11, LOW);
 
}

if (buttonState3 == LOW) {
// PUERTA 3 ABIERTA

 digitalWrite(ledPin10, LOW);
 digitalWrite(ledPin9, HIGH);

} else if (buttonState4 == LOW) {

 //  PUERTA 4 ABIERTA

 digitalWrite(ledPin10, HIGH);
 digitalWrite(ledPin9, LOW);

} else{
// PUERTAS LIBERADAS

 digitalWrite(ledPin10, LOW);
 digitalWrite(ledPin9, LOW);

}

} }

void alarma () {
unsigned long t;
t = millis();
if (buttonState1 || buttonState2 || buttonState3 || buttonState4 == LOW){
if ( millis()-t > 20000 ) {
digitalWrite(8,HIGH);} // Ha pasado 20 segundos, enciende alarma.
else {digitalWrite(8,LOW);}
}}

Hi @jpaluch

¿Este caso es el mismo que este?

¿Por qué repetir la publicación?

RV mineirin

si, lo repeti, pensando que se publicaba en dos foros distintos...

Moderador:
Tienes un privado con instrucciones para llevar adelante.
Has posteado 3 veces lo mismo, pero un moderador del foro en inglés borró tu 3er post.
Por favor edita este hilo, con las instrucciones que te dí por privado y no sigas respondiendo sin antes hacerlo.

no entiendo que tengo que hacer...

Leiste el privado?