Problema digitalRead

Estoy creando un código de una alarma por varias zonas. Lo tengo montado con una sirena, un zumbador, un par de leds para el estado y por último una serial LCD.

Mi problema viene dado cuando quiero meter 2 sensores PIR, hasta ahora he utilizado la funcion if..else para programar lo que debe de hacer la lcd y los demás componentes respectivamente dependiendo estado del PIR.

Mi duda es, que cuando meto otra funcion if..else con otra variable no funciona y por tanto en la LCD ni el resto de los componentes funcionan como yo tenia programado.

Aquí posteo el código, muchas gracias por su atención.

int sirena=6;
int ledestate=13;
int ledsirena=8;
int zumbador=5;
int sensor=7;
int val = 0; 
int p1=0;
int sensor2= 10; 

#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);


void setup()
 {
  pinMode(sensor2, INPUT);
  Serial.begin(9600);
  Serial.print(0x7C, BYTE);  
  Serial.print(157, BYTE);  
  pinMode(ledestate, OUTPUT);
  pinMode(ledsirena, OUTPUT);
  pinMode(zumbador, OUTPUT);
  pinMode(sensor, INPUT);
  pinMode(sirena, OUTPUT);

}

void loop()
{
alarmaloop:
   
   val = digitalRead(sensor);
   if (val == HIGH) {
     
   digitalWrite(ledsirena, HIGH); 
   digitalWrite(zumbador, HIGH);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 10 ");
   delay(1000);   
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 9");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 8");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 7");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 6");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 5");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 4");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
    Serial.print(0xFE,BYTE); 
    Serial.print(0x01,BYTE);
    delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 3");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 2");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Desactive Ahora 1");
   delay(1000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);

   digitalWrite(sirena, HIGH);
   
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("    Alarma!!");     
   delay(30000); 
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   
 
 

 
} else { 
inicioloop:  

   digitalWrite(ledestate,HIGH);
   Serial.print(0xFE,BYTE); 
   Serial.print(0x01,BYTE);
   delay(1000);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Sistema Listo");
   delay(4000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   digitalWrite(ledestate,LOW);
 
  lcd.noDisplay();
  delay(1000);
 
   digitalWrite(ledestate,HIGH);
   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Sistema Listo");
   delay(4000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   digitalWrite(ledestate,LOW);
  

   Serial.print(0xFE, BYTE);   
   Serial.print(128, BYTE);   
   Serial.print("Seguter S.L");
   delay(4000);  
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   digitalWrite(ledestate,LOW);
 

 }{
----------------------------------------------------------------------------
[glow]AQUI ESTA EL PROBLEMA, ESTE SENSOR NO ACTUA SEGUN LO PROGRAMADO
[/glow]
 p1= digitalRead(sensor2); 
 if (p1==HIGH);{
goto alarmaloop;
 
}else{
goto inicioloop;
}
 }
}



[glow]Este es el código con los dos sensores que por cierto, no me compila.
[/glow]

Si no pones el programa en un bloque de código (boton # del menu donde escribes texto) se pierde toda la indentacion

Gracias!
Al ser nuevo no me di cuenta.
Bueno ese es el código y como digo solo reacciona con un sensor pir, con el otro no.

El otro sensor PIR no está incluido en el código que has puesto, no?
Y en el código faltan corchetes en algunos sitios, mira si puedes ponerlos.
Antes de volverlo a poner, verifica el código dándole al botón de play, ya que hay muchos fallos de sintaxis.

Un saludo

Una recomendación de programador experimentado...siempre que puedas EVITA usar las sentencias goto. Hazlo con bucles, condicionales u otros sistemas, sino tu código será difícil de entender y depurar. El 'goto' es algo muy potente, pero que solo debería ser utilizado a nivel ensamblador o en casos muy especiales.

A que te refieres?
:slight_smile:

Que el goto es muy útil en ensamblador donde no puedes hacer if/else, solo puedes saltar, pero en C, teniendo dichas estructuras y funciones no tiene sentido alguno el usar goto, lo único para lo que sirve es para crear bugs innecesarios y complicar la compresión del programa.

Tienes que corregir la línea de "}{", no se que querías hacer con eso.
Te echaría una mano , pero es que me es imposible entender el código tan desordenado.

Te aconsejo que empieces con algo más básico y aprendas luego a hacer funciones para simplificar el código, ya que hay bloques que repites muchísimas veces.

Un saludo

Ya he solucionado el problema, era tema de hardware, por lo visto el sensor PIR estaba dañado.

De todas maneras con esto me manejo muy bien, lo práximo será ponerle teclado con código, para esto si necesitaré ayuda.
Gracias de nuevo soys lo mejor :stuck_out_tongue: