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);}
}}