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?

https://forum.arduino.cc/t/entradas-salidas-funcion-millis/900953

¿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?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.