Se pueden conectar varios sensores en un mismo pin?

Buenos dias o buenas tardes sea el caso, pasa que estoy creando un sistema de alarma con sensores magneticos o contactos magneticos. El problema esta que se me agotaron los pines digitales, y estoy optando por conectar varios contactos magneticos en un solo pin para liberar los mismos, pero como soy novato no logro dar con el metodo para hacerlo.

aqui dejo el codigo del programa por si me pueden dar una mano, agradezco de ante mano cualquier ayuda o sugerencia.

codigo_reprogramado.ino (4.58 KB)

En las alarmas comerciales se conectan mas de un sensor, pero lo hacen en serie, no en paralelo. De hecho si los conectas en paralelo no te serviría, porque son todos normal cerrado.

Saludos

gracias por la respuesta amigo, evidentemente intente conectarlos en paralelo y no funciono, pero en serie si me funcionaron muy bien, gracias por la ayuda.

Ahora el detalle es que quiero que cuando se active la primera zona se mantenga el indicador Fijo la segunda parpadee, la tercera parpadee mas rapido y la cuarta aun mas rapido.
Ya logre que se mantuviera la primera con este codigo:

if (estado_sensor2== HIGH){
        if (variable==0){
          variable == 2;
        }
     if (variable = 2){

   
      if (estado_sensor2== HIGH){
      digitalWrite(zona2, HIGH); 
      digitalWrite(led_desarmado, LOW);
      
        for (int iTono = 0; iTono < countTonos; iTono++)/*funcion repetidora*/
    {
        tone(buzzer, tonos[iTono]);
       digitalWrite(zona2, HIGH);
        delay(500);
       digitalWrite(zona2, LOW);
 
    } 
      Serial.print("DATA,TIME,");
      delay(20000);
      Serial.println("ACTIVADA:ZONA_2");
     }}temporal2==1;
     
 }

pero no logro hacer el resto, si puedes ayudarme seria excelente.

Yo te recomiendo que puedas estructurar mas el programa, por ejemplo generar un void para usar tu alarma y otro para el programa principal. Te dejo un ejemplo:

void loop(){
if (estado_sensor2== HIGH){
alarma();
mensaje();

}

}
////////////////////SUBRUTINAS///////////////////////////////////////////////////
void alarma(){
for (int iTono = 0; iTono < countTonos; iTono++)/funcion repetidora/
{
tone(buzzer, tonos[iTono]);
digitalWrite(zona2, HIGH);
delay(500);
digitalWrite(zona2, LOW);

}

}

void mensaje(){
Serial.print(“DATA,TIME,”);
Serial.print(“ACTIVADA:”);
Serial.println(zona); //aca va la variable que asigna
delay(2000); // 2 segundos

}

Si quieres que tu led parpadee a velocidades distintas, tienes que poner mas entradas para que en el programa puedas diferencias la zona.
Si quieres te envio un ejemplo utilizando tu programa base.

Muchas gracias por tu respuesta fracor2, me parece buena tu idea, si puedes pasarme un ejemplo lo agradeceria mucho.

fracor2, ya organice el codigo de acuerdo a tus sugerencias, lo anexo en un archivo.
pero sigo sin saber como hacer para que el identificador de la primera zona que se active se comporte distinto a las zonas que se activan despues.

organizado.ino (5.16 KB)

@Willsketch creo que en otro hilo te hice el mismo comentario pero.. he respondido tantos hilos hoy que no estoy seguro.
Lee las normas del foro y asegúrate de usar etiquetas cuando posteas códigos.
Ahora debes editar tu post inicial y el post#5 para que el código que tiene menos de 9k se lea directamente y no que obligue a ser descargado para responderte. Eso limita las respuetas.
Solo cuando no cabe en el post es que se adjunta como has hecho.
@fracor2 misma sugerencia, edita tu post#3