Hago una observación incisa:
El moderador se ha preocupado, lo mismo que yo al leer las palabras:
subestación, seccionador y interruptor automático.
Esas tres palabras implican, si o si, entorno industrial y más dudas. Es algo
muy gordo que un simple Arduino encendiendo o apagando leds.
Te pongo mis dudas, para que comprendas lo que me vino la cabeza al leer tu
post:
En realidad lo que busco y esto representa es una evacuación de energía a una subestación, donde i1 y i2 son 2 seccionadores (con sus correspondientes indicadores led 1 y led 2) e i3 es un interruptor automático (los 3 están en serie en una subestación). Entonces, como los seccionadores (i1 e i2) no tienen capacidad o poder de corte para abrir un circuito energizado, por eso necesito que cuando los 3 estén cerrados, si intento abrir primero el i1 o i2 no debe permitírmelo y debe saltar el interruptor automático (i3 debe abrirse). Eso si, una vez abierto i3, (se desergiza la red) y ya si pueden abrir i1 e i2.
Que yo sepa la mayoria de los seccionadores son manuales, por lo tanto ¿qué
impide que un operador lo abra? ¿Los seccionadores son motorizados?, si fuera
el caso habría que saber como se controla dicho seccionador, es mas, un
seccionador solo debe operarse es ausencia de corriente, por lo cual, deberia
tener un candado y no tocarse. Cuando dices interruptor automático y
subestación, a mi cabeza vienen interruptores de caja moldeada o de bastidor
abierto. Los cuales llevan asociados generalmente dos bobinas una de cierre y
otra de apertura, por lo que el control de un caso u otro son circuitos distintos.
Si se puede hacer con Arduino, por supuesto. Yo lo haría bajo una condición:
un analisis exhaustivo de todo el circuito y creando un PLC a medida para dicho
proyecto: con entradas optoacopladas, prueba de ruidos, salidas protegidas, etc. Pero yo, soy yo. Tanto el moderador como yo trabajamos en entornos
industriales y debemos tener eso en cuenta; sobretodo si alguien sin
conocimientos quiere jugar con fuego.
ANTE TODO SEGURIDAD, NO QUEREMOS ACCIDENTES!!.
En cuanto el planteamiento de tu problema.
Si estando encendida las 3 luces, si intentamos abrir el interruptor i1 (no sólo no se apague su led l1, sino que se abra el interruptor i3 o sino que se apague el led de l3. En este mismo caso con las 3 luces encendidas, si intentamos abrir i2, no solo no debe apagarse su luz, sino que debe abrirse i3 o apagarse su luz (led 3).
Tal y como se ha planteado en el primer post es imposible que se abra el
interruptor i3 de manera automática, como mucho podemos apagar el led 3.
L3 se apagará cuando i3 se abra, cuando i1 se abra o cuando i2 se abra, o
traducido en código, un simple condicional debería bastar:
if ( l3==HIGH && ( i1==LOW || i2==LOW || i3 == LOW ) ) digitalWrite(l3, LOW);
-Tambien necesito un añadir un interruptor, que si se pulsa por primera vez, abra el interruptor i3, por 5 segundos o al menos que apague su luz por ese tiempo. Pasados los 5 segundos vuelve a estar activo y si se vuelve a pulsar el interruptor, pues debe abrir i3 o su led por 30 segundos. Si vuelve a ocurrir una tercera vez, deja ya abierto permanentemente i3 o su luz. En realidad, esto (el interruptor) sería la simulación de un fallo en la red, donde la primera vez se desactiva (salta el interruptor automatico i3) y se reengancha a los segundos para finalmente al tercer fallo, quedar permanentemente abierto por motivos de seguridad.
Aquí la idea es usar un contador que cuente las veces que se ha cerrado.
Cada vez que el interruptor se cierre cuentas. Si el contador vale 1, debes
usar un temporizador para contar 5 segundos, tras los cuales debes encender
el led. Eso se realiza mediante millis y puedes pasarte por la sección
documentación
y ver algunos tutoriales que se han creado para aprender a usarla. Cuando el
contador vale 2, lo mismo pero esperando 30 segundos; y si vale 3, no necesitas
contar tiempo solo abrir.
Aquí ya no son simples condicionales, es más complicado y conviene practicar
un poco con una serie de ejemplos, hasta que al final la temporización entre en
la cabeza.