Como Activar/Desactivar sensor PIR via Bluetooh

Hola soy nuevo con el arduino, lo que necesito es unir dos codigos, el primero es para encender leds uno por uno (12 en total) via Bluetooth con una app del movil, + sesor ldr para apagar los ultimos 4, este primero lo e armado yo con ayuda de tutoriales y otros foros.

Código:
int led1 = 40;      //Luz 1 Comedor
int led2 = 41;      //Luz_2_Comedor
int led3 = 42;      //Luz_Cocina
int led4 = 43;      //Luz_1_Pasillo 
int led5 = 44;      //Luz_1_Pasillo 
int led6 = 45;      //Luz_Hab 1
int led7 = 46;      //Luz_Hab 1
int led8 = 47;      //Luz_Baño
int led9 = 48;      //Luz_Garaje
int led10 = 49;     //Luz_1_Jardin
int led11 = 50;     //Luz_2_Jardin
int led12 = 51;     //Luz_3_Jardin
int led13 = 52;     //Luz_4_Jardin

int estado = 0;

int LDRpin=A1;
int LDRabc=0;
float LDRvoltaje=0;


void setup(){
  
  Serial.begin(9600);
  pinMode(LDRpin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);

 
void loop()
{
      
     else
     {
       digitalWrite(ledPin, LOW); 
       digitalWrite(buzzerPin, LOW); 
     }
   
 if( Serial.available()>0)
  {
    estado = Serial.read();
  }
  switch( estado)
  {
    case 'a':
    digitalWrite(led1, HIGH);
    break;
    case 'b':
    digitalWrite(led1, LOW);
    break;
    
    case 'c':
    digitalWrite(led2, HIGH);
    break;
    case 'd':
    digitalWrite(led2, LOW);
    break;
    
    case 'e':
    digitalWrite(led3, HIGH);
    break;  
    case 'f':
    digitalWrite(led3, LOW);
    break;

    case 'g':
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    
    break;  
    case 'h':
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    break;

    case 'i':
    digitalWrite(led6, HIGH);
    break;  
    case 'j':
    digitalWrite(led6, LOW);
    break;

    case 'k':
    digitalWrite(led7, HIGH);
    break;  
    case 'l':
    digitalWrite(led7, LOW);
    break;

    case 'm':
    digitalWrite(led8, HIGH);
    break;  
    case 'n':
    digitalWrite(led8, LOW);
    break;

    case 'o':
    digitalWrite(led9, HIGH);
    break;  
    case 'p':
    digitalWrite(led9, LOW);
    break;

    case 'q':
    digitalWrite(led10, HIGH);
    digitalWrite(led11, HIGH);
    digitalWrite(led12, HIGH);
    digitalWrite(led13, HIGH);
    
    break;  
    case 'r':
    digitalWrite(led10, LOW);
    digitalWrite(led11, LOW);
    digitalWrite(led12, LOW);
    digitalWrite(led13, LOW);
    break;

  

    
  }
  
  {
    LDRabc=analogRead(LDRpin);
    LDRvoltaje=LDRabc*(5.0/1023.0);
    Serial.print("voltaje LDR: ");
    delay(200);
    Serial.println(LDRvoltaje);

    if(LDRvoltaje<=1.20){
      digitalWrite(led10, HIGH);
      delay(500);
      digitalWrite(led11, HIGH);
      delay(600);
      digitalWrite(led12, HIGH);
      delay(700);
      digitalWrite(led13, HIGH);
      delay(800);
  
      }

     else {
      
          digitalWrite(led10, LOW);
          digitalWrite(led11, LOW);
          digitalWrite(led12, LOW);
          digitalWrite(led13, LOW);
          
          }
  }

}

Ahora necesito juntarlo con este , es para un sensor de movimiento PIR + buzzer activo(simulando una alarma ), llego hacer que funcione por separado , pero necesito tener todo en un solo sketch y aparte quiero que con una letra por ejemplo la "A" se active el sensor y con la "B" se desactive, asi hacer que el blothooth interprete esas variables y ejecutarlo desde el movil, este es el segundo codigo que encontre en internet.

:
Código:
int ledPin = 13;                // choose the pin for the LED
int inputPin = 2;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
int pinSpeaker = 10;           //Set up a speaker on a PWM pin (digital 9, 10, or 11)

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
  pinMode(pinSpeaker, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    playTone(300, 160);
    delay(150);

    
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
      digitalWrite(ledPin, LOW); // turn LED OFF
      playTone(0, 0);
      delay(300);    
      if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}
// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
    duration *= 1000;
    int period = (1.0 / freq) * 1000000;
    long elapsed_time = 0;
    while (elapsed_time < duration) {
        digitalWrite(pinSpeaker,HIGH);
        delayMicroseconds(period / 2);
        digitalWrite(pinSpeaker, LOW);
        delayMicroseconds(period / 2);
        elapsed_time += (period);
    }
}

Nose como unirlos sin que me de error, gracias de antemano .
 
Usas un Mega? son muchas salias

Algunas cosas que quisiera resaltar:
En el primero tienes un else en el principio del loop que no tiene un if anterior, eso no se que tan bien esté, nunca he intentado poner un else sin su if asociado.

Seguido del switch case estas agregando otro bloque, no se que tan bien se hacer eso.

Te sugiero usar serialEvent (mira el ejemplo en Communication) en lugar de polling si quieres unir lo códigos, así dejas los comandos de los LED en una rutina ajena y el PIR lo controlas por banderas (agregas una variable global boleana y solo usas el serialEvent para cambiarla de true a false), eso será más adecuado para reducir los conflictos.

Veo que también tienes una rutina para tonos, en realidad ya existe una en la API de Arduino la función tone()
 
Usas un Mega? son muchas salias
Algunas cosas que quisiera resaltar:
En el primero tienes un else en el principio del loop que no tiene un if anterior, eso no se que tan bien esté, nunca he intentado poner un else sin su if asociado.

Seguido del switch case estas agregando otro bloque, no se que tan bien se hacer eso.

Te sugiero usar serialEvent (mira el ejemplo en Communication) en lugar de polling si quieres unir lo códigos, así dejas los comandos de los LED en una rutina ajena y el PIR lo controlas por banderas (agregas una variable global boleana y solo usas el serialEvent para cambiarla de true a false), eso será más adecuado para reducir los conflictos.

Veo que también tienes una rutina para tonos, en realidad ya existe una en la API de Arduino la función

Hola gracias por responder, si uso mega 2560.
Al final cosegui armar este codigo para que me funcione la alarma con el bluetooth:

Código:
int led1 = 40;      //Luz 1 Comedor
int led2 = 41;      //Luz_2_Comedor
int led3 = 42;      //Luz_Cocina
int led4 = 43;      //Luz_1_Pasillo 
int led5 = 44;      //Luz_1_Pasillo 
int led6 = 45;      //Luz_Hab 1
int led7 = 46;      //Luz_Hab 1
int led8 = 47;      //Luz_Baño
int led9 = 48;      //Luz_Garaje
int led10 = 49;     //Luz_1_Jardin
int led11 = 50;     //Luz_2_Jardin
int led12 = 51;     //Luz_3_Jardin
int led13 = 52;     //Luz_4_Jardin

int estado = 0;

int LDRpin=A1;            // define el pin conectado al ldr
int LDRabc=0;
float LDRvoltaje=0;         // variable tipo flotante


int led =6;        // pin del led rojo
int pirPin =7;      // pin para el sesor de movimiento
int buzzer = 5;     // pin para buzzer activo  


void setup(){
  
   
  Serial.begin(9600);
  pinMode(LDRpin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
  pinMode( led , OUTPUT) ;
  pinMode (pirPin , INPUT);
  pinMode (buzzer , OUTPUT);

}
 
void loop(){  
 if( Serial.available()>0)   
 
 { 
  char dato= Serial.read ();         // leremos el dato enviado
  Serial.println(dato);              // mostramos el dato
  if(dato =='s')                     // si es igual se habilita alarma
  {
    while(!Serial.available())            // se ejecuta si el dato es "S"
    {
      digitalWrite(led, LOW);              //apagamos el led rojo
      int pirVal = digitalRead(pirPin);     // leemos el valor del sensor 
      Serial.println (pirVal);           // mostramos este valor 
      if(pirVal == HIGH)                 //si es 1 
      {
        digitalWrite(buzzer, HIGH);      //encenderemos el led rojo y sonara el buzzer
        digitalWrite(led, HIGH);
      }
      else  // si fuese un "0"
      {
        digitalWrite(buzzer, LOW);
        digitalWrite(led, LOW);         //se apaga el led rojo y deja de  sonara el buzzer
        }
        delay(400);                   //esperamos 400ms 
       }
  }
  else 
  { 
    digitalWrite(buzzer, LOW);
    digitalWrite(led, LOW);
  
    }

   { estado = Serial.read();
  }
  switch( estado)
  {
    case 'a':
    digitalWrite(led1, HIGH);    // primera luz del interior la casa 
    break;
    case 'b':
    digitalWrite(led1, LOW);
    break;
    
    case 'c':
    digitalWrite(led2, HIGH);
    break;
    case 'd':
    digitalWrite(led2, LOW);
    break;
    
    case 'e':
    digitalWrite(led3, HIGH);
    break;  
    case 'f':
    digitalWrite(led3, LOW);
    break;

    case 'g':
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);        // luz pasillo ambas encienden a la vez 
    
    break;  
    case 'h':
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);    // luz pasillo ambas se apagan a la vez 
    break;

    case 'i':
    digitalWrite(led6, HIGH);
    break;  
    case 'j':
    digitalWrite(led6, LOW);
    break;

    case 'k':
    digitalWrite(led7, HIGH);
    break;  
    case 'l':
    digitalWrite(led7, LOW);
    break;

    case 'm':
    digitalWrite(led8, HIGH);
    break;  
    case 'n':
    digitalWrite(led8, LOW);
    break;

    case 'o':
    digitalWrite(led9, HIGH);
    break;  
    case 'p':
    digitalWrite(led9, LOW);    // ultima luz del interior de la casa 
    break;

    case 'q':
    digitalWrite(led10, HIGH);
    digitalWrite(led11, HIGH);      // lucess del jardin  
    digitalWrite(led12, HIGH);
    digitalWrite(led13, HIGH);
    
    break;  
    case 'r':
    digitalWrite(led10, LOW);
    digitalWrite(led11, LOW);     //apagamos luces del jardin 
    digitalWrite(led12, LOW);
    digitalWrite(led13, LOW);
    break;

     case 's':
    digitalWrite(pirPin, HIGH);    // activamos alarma
    break;  
    case 't':
    digitalWrite(pirPin, LOW);    // desactivamos alarma
    break;

  }

 }

  
  {
    LDRabc=analogRead(LDRpin);
    LDRvoltaje=LDRabc*(5.0/1023.0);
    Serial.print("voltaje LDR: ");
    delay(200);
    Serial.println(LDRvoltaje);

    if(LDRvoltaje<=1.20){
      digitalWrite(led10, HIGH);    
      delay(500);
      digitalWrite(led11, HIGH);      // luces del jardin encienden de noche
      delay(600);
      digitalWrite(led12, HIGH);
      delay(700);
      digitalWrite(led13, HIGH);
      delay(800);
  
      }

     else {
      
          digitalWrite(led10, LOW);
          digitalWrite(led11, LOW);   // luces del jardin se apagan de dia
          digitalWrite(led12, LOW);
          digitalWrite(led13, LOW);
          
          }
  }
 
  }


Con el primer codigo me llega a funcionar la alarma con el bluetooth que es lo que estaba buscando lo malo es que ahora no van los leds, no encienden , (los 4 últimos llegan a prender pero por el sensor LDR) tengo muy poco conocimiento de arudino, pero si pueden ayudarme mejorando el código o corrigiendo el error que tenga, lo agradecería mucho

adjunto el codigo con el que si me ensienden los leds, que es como estaba antes de unirlo con el codigo del sensor PIR:

Código:
int led1 = 40;      //Luz 1 Comedor
int led2 = 41;      //Luz_2_Comedor
int led3 = 42;      //Luz_Cocina
int led4 = 43;      //Luz_1_Pasillo 
int led5 = 44;      //Luz_1_Pasillo 
int led6 = 45;      //Luz_Hab 1
int led7 = 46;      //Luz_Hab 1
int led8 = 47;      //Luz_Baño
int led9 = 48;      //Luz_Garaje
int led10 = 49;     //Luz_1_Jardin
int led11 = 50;     //Luz_2_Jardin
int led12 = 51;     //Luz_3_Jardin
int led13 = 52;     //Luz_4_Jardin

int estado = 0;

int LDRpin=A1;
int LDRabc=0;
float LDRvoltaje=0;


int led =6;
int pirPin =7;
int buzzer = 5;


void setup(){
  
  Serial.begin(9600);
  pinMode(LDRpin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
  pinMode( led , OUTPUT) ;
  pinMode (pirPin , INPUT);
  pinMode (buzzer , OUTPUT);

}
 
void loop(){  
 if( Serial.available())
 
   { estado = Serial.read();
  }
  switch( estado)
  {
    case 'a':
    digitalWrite(led1, HIGH);
    break;
    case 'b':
    digitalWrite(led1, LOW);
    break;
    
    case 'c':
    digitalWrite(led2, HIGH);
    break;
    case 'd':
    digitalWrite(led2, LOW);
    break;
    
    case 'e':
    digitalWrite(led3, HIGH);
    break;  
    case 'f':
    digitalWrite(led3, LOW);
    break;

    case 'g':
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    
    break;  
    case 'h':
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    break;

    case 'i':
    digitalWrite(led6, HIGH);
    break;  
    case 'j':
    digitalWrite(led6, LOW);
    break;

    case 'k':
    digitalWrite(led7, HIGH);
    break;  
    case 'l':
    digitalWrite(led7, LOW);
    break;

    case 'm':
    digitalWrite(led8, HIGH);
    break;  
    case 'n':
    digitalWrite(led8, LOW);
    break;

    case 'o':
    digitalWrite(led9, HIGH);
    break;  
    case 'p':
    digitalWrite(led9, LOW);
    break;

    case 'q':
    digitalWrite(led10, HIGH);
    digitalWrite(led11, HIGH);
    digitalWrite(led12, HIGH);
    digitalWrite(led13, HIGH);
    
    break;  
    case 'r':
    digitalWrite(led10, LOW);
    digitalWrite(led11, LOW);
    digitalWrite(led12, LOW);
    digitalWrite(led13, LOW);
    break;

  }

  
  {
    LDRabc=analogRead(LDRpin);
    LDRvoltaje=LDRabc*(5.0/1023.0);
    Serial.print("voltaje LDR: ");
    delay(200);
    Serial.println(LDRvoltaje);

    if(LDRvoltaje<=1.20){
      digitalWrite(led10, HIGH);
      delay(500);
      digitalWrite(led11, HIGH);
      delay(600);
      digitalWrite(led12, HIGH);
      delay(700);
      digitalWrite(led13, HIGH);
      delay(800);
  
      }

     else {
      
          digitalWrite(led10, LOW);
          digitalWrite(led11, LOW);
          digitalWrite(led12, LOW);
          digitalWrite(led13, LOW);
          
          }
  }
 
  }
 
Última edición:
Esto se basa en serialEvent y una bandera para activar y desactivar la función por LDR o de lo contrario podría haber conflictos entre la manual y la automática, úsalo como referencia a como activar y desactivar la alarma, es bastante simple.

Código:
int led1 = 40;      //Luz 1 Comedor
int led2 = 41;      //Luz_2_Comedor
int led3 = 42;      //Luz_Cocina
int led4 = 43;      //Luz_1_Pasillo
int led5 = 44;      //Luz_1_Pasillo
int led6 = 45;      //Luz_Hab 1
int led7 = 46;      //Luz_Hab 1
int led8 = 47;      //Luz_Baño
int led9 = 48;      //Luz_Garaje
int led10 = 49;     //Luz_1_Jardin
int led11 = 50;     //Luz_2_Jardin
int led12 = 51;     //Luz_3_Jardin
int led13 = 52;     //Luz_4_Jardin

int estado = 0;

int LDRpin = A1;
int LDRabc = 0;
float LDRvoltaje = 0;
bool LDRactivar = false;


int led = 6;
int pirPin = 7;
int buzzer = 5;


void setup() {

  Serial.begin(9600);
  pinMode(LDRpin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
  pinMode( led , OUTPUT) ;
  pinMode (pirPin , INPUT);
  pinMode (buzzer , OUTPUT);

}

void loop() {
  if(LDRactivar){
    LDRabc = analogRead(LDRpin);
    LDRvoltaje = LDRabc * (5.0 / 1023.0);
    Serial.print("voltaje LDR: ");
    delay(200);
    Serial.println(LDRvoltaje);

    if (LDRvoltaje <= 1.20) {
      digitalWrite(led10, HIGH);
      delay(500);
      digitalWrite(led11, HIGH);
      delay(600);
      digitalWrite(led12, HIGH);
      delay(700);
      digitalWrite(led13, HIGH);
      delay(800);

    }

    else {

      digitalWrite(led10, LOW);
      digitalWrite(led11, LOW);
      digitalWrite(led12, LOW);
      digitalWrite(led13, LOW);

    }
  }

}
void serialEvent() {
  while (Serial.available()) {
    estado = Serial.read();
    switch (estado)
    {
      case 'a':
        digitalWrite(led1, HIGH);
        break;
      case 'b':
        digitalWrite(led1, LOW);
        break;

      case 'c':
        digitalWrite(led2, HIGH);
        break;
      case 'd':
        digitalWrite(led2, LOW);
        break;

      case 'e':
        digitalWrite(led3, HIGH);
        break;
      case 'f':
        digitalWrite(led3, LOW);
        break;

      case 'g':
        digitalWrite(led4, HIGH);
        digitalWrite(led5, HIGH);

        break;
      case 'h':
        digitalWrite(led4, LOW);
        digitalWrite(led5, LOW);
        break;

      case 'i':
        digitalWrite(led6, HIGH);
        break;
      case 'j':
        digitalWrite(led6, LOW);
        break;

      case 'k':
        digitalWrite(led7, HIGH);
        break;
      case 'l':
        digitalWrite(led7, LOW);
        break;

      case 'm':
        digitalWrite(led8, HIGH);
        break;
      case 'n':
        digitalWrite(led8, LOW);
        break;

      case 'o':
        digitalWrite(led9, HIGH);
        break;
      case 'p':
        digitalWrite(led9, LOW);
        break;

      case 'q':
        digitalWrite(led10, HIGH);
        digitalWrite(led11, HIGH);
        digitalWrite(led12, HIGH);
        digitalWrite(led13, HIGH);

        break;
      case 'r':
        digitalWrite(led10, LOW);
        digitalWrite(led11, LOW);
        digitalWrite(led12, LOW);
        digitalWrite(led13, LOW);
        break;
        
      //Activacion de funcion por LDR
      case 'S': //'S' Mayuscula activa la funcion por LDR
        LDRActivar = true;
        break;
      case 's': //'s' Minuscula desactiva la funcion por LDR
        LDRActivar = false;
        break;

    }
  }
}
Nota que 'S' y 's' son diferentes, te recomendaría que uses mayúsculas y minúsculas para encender y apagar, de esta forma tienes menos confusiones con las letras cuando este programando y la tarea es más sencilla, otro método es asignar un bit a cada función y modificarlo directamente con una variable, pero eso depende de como programes la aplicación y creo que usas App Inventor.
 
Última edición:
Esto se basa en serialEvent y una bandera para activar y desactivar la función por LDR o de lo contrario podría haber conflictos entre la manual y la automática, úsalo como referencia a como activar y desactivar la alarma, es bastante simple.

Código:
int led1 = 40;      //Luz 1 Comedor
int led2 = 41;      //Luz_2_Comedor
int led3 = 42;      //Luz_Cocina
int led4 = 43;      //Luz_1_Pasillo
int led5 = 44;      //Luz_1_Pasillo
int led6 = 45;      //Luz_Hab 1
int led7 = 46;      //Luz_Hab 1
int led8 = 47;      //Luz_Baño
int led9 = 48;      //Luz_Garaje
int led10 = 49;     //Luz_1_Jardin
int led11 = 50;     //Luz_2_Jardin
int led12 = 51;     //Luz_3_Jardin
int led13 = 52;     //Luz_4_Jardin

int estado = 0;

int LDRpin = A1;
int LDRabc = 0;
float LDRvoltaje = 0;
bool LDRactivar = false;


int led = 6;
int pirPin = 7;
int buzzer = 5;


void setup() {

  Serial.begin(9600);
  pinMode(LDRpin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
  pinMode( led , OUTPUT) ;
  pinMode (pirPin , INPUT);
  pinMode (buzzer , OUTPUT);

}

void loop() {
  if(LDRactivar){
    LDRabc = analogRead(LDRpin);
    LDRvoltaje = LDRabc * (5.0 / 1023.0);
    Serial.print("voltaje LDR: ");
    delay(200);
    Serial.println(LDRvoltaje);

    if (LDRvoltaje <= 1.20) {
      digitalWrite(led10, HIGH);
      delay(500);
      digitalWrite(led11, HIGH);
      delay(600);
      digitalWrite(led12, HIGH);
      delay(700);
      digitalWrite(led13, HIGH);
      delay(800);

    }

    else {

      digitalWrite(led10, LOW);
      digitalWrite(led11, LOW);
      digitalWrite(led12, LOW);
      digitalWrite(led13, LOW);

    }
  }

}
void serialEvent() {
  while (Serial.available()) {
    estado = Serial.read();
    switch (estado)
    {
      case 'a':
        digitalWrite(led1, HIGH);
        break;
      case 'b':
        digitalWrite(led1, LOW);
        break;

      case 'c':
        digitalWrite(led2, HIGH);
        break;
      case 'd':
        digitalWrite(led2, LOW);
        break;

      case 'e':
        digitalWrite(led3, HIGH);
        break;
      case 'f':
        digitalWrite(led3, LOW);
        break;

      case 'g':
        digitalWrite(led4, HIGH);
        digitalWrite(led5, HIGH);

        break;
      case 'h':
        digitalWrite(led4, LOW);
        digitalWrite(led5, LOW);
        break;

      case 'i':
        digitalWrite(led6, HIGH);
        break;
      case 'j':
        digitalWrite(led6, LOW);
        break;

      case 'k':
        digitalWrite(led7, HIGH);
        break;
      case 'l':
        digitalWrite(led7, LOW);
        break;

      case 'm':
        digitalWrite(led8, HIGH);
        break;
      case 'n':
        digitalWrite(led8, LOW);
        break;

      case 'o':
        digitalWrite(led9, HIGH);
        break;
      case 'p':
        digitalWrite(led9, LOW);
        break;

      case 'q':
        digitalWrite(led10, HIGH);
        digitalWrite(led11, HIGH);
        digitalWrite(led12, HIGH);
        digitalWrite(led13, HIGH);

        break;
      case 'r':
        digitalWrite(led10, LOW);
        digitalWrite(led11, LOW);
        digitalWrite(led12, LOW);
        digitalWrite(led13, LOW);
        break;
        
      //Activacion de funcion por LDR
      case 'S': //'S' Mayuscula activa la funcion por LDR
        LDRActivar = true;
        break;
      case 's': //'s' Minuscula desactiva la funcion por LDR
        LDRActivar = false;
        break;

    }
  }
}
Nota que 'S' y 's' son diferentes, te recomendaría que uses mayúsculas y minúsculas para encender y apagar, de esta forma tienes menos confusiones con las letras cuando este programando y la tarea es más sencilla, otro método es asignar un bit a cada función y modificarlo directamente con una variable, pero eso depende de como programes la aplicación y creo que usas App Inventor.

Muchas gracias por la ayuda compañero, al final pude encontrar un solución buscando mil veces por Internet, adjunto el codigo que arme, si hay alguna forma de mejorarlo, se agradece.

Al solucionar lo del sensor PIR segui avanzando con mi proyecto, esta vez agregue un sensor de temperatura y humedad DTH11 y un ventilador, el cual se active automáticamente dependiendo de la temperatura, pero también encenderlo con la app del móvil.

Código:
#include <DHT.h>

int sensor = 22; 
int temp, humedad;

DHT dht (sensor, DHT11);

int led1 = 40;      //Luz 1 Comedor
int led2 = 41;      //Luz_2_Comedor
int led3 = 42;      //Luz_Cocina
int led4 = 43;      //Luz_1_Pasillo 
int led5 = 44;      //Luz_1_Pasillo 
int led6 = 45;      //Luz_Hab 1
int led7 = 46;      //Luz_Hab 1
int led8 = 47;      //Luz_Baño
int led9 = 48;      //Luz_Garaje
int led10 = 49;     //Luz_1_Jardin
int led11 = 50;     //Luz_2_Jardin
int led12 = 51;     //Luz_3_Jardin
int led13 = 52;     //Luz_4_Jardin

int ventilador= 8;

//bluetooth 
int estado = 0;

int LDRpin=A1;            // define el pin conectado al LDR
int LDRabc=0;
float LDRvoltaje=0;         // variable tipo flotante

int alarma=39;            //alarma contra intrusos y a la vez de incendios
int piralarma=7;         //sensor pir que detecta movimiento
int piralarmaState;       //variable para almacenar el valor del sensor pir


void setup(){
  
   
  Serial.begin(9600);
  dht.begin();
  pinMode(LDRpin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);

  pinMode(alarma, OUTPUT); 
  pinMode(piralarma, INPUT);


  pinMode(ventilador,OUTPUT);     //configuracion del ventilador


}
 
void loop(){  
 if( Serial.available()>0)   

   { estado = Serial.read();
  }
  
  if (estado=='s'){                 //si estado es igual a "6"  
    piralarmaState = digitalRead(piralarma);    //estado del pir alarma será igual al valor que lea del sensor

  if (piralarmaState==HIGH) {           //si hay intrusos
         digitalWrite(alarma, HIGH);           //activa alarma
         delay(500);
  if (estado=='t'){               //si estado es igual a "7"  
           digitalWrite(alarma, LOW);       //desactiva alarma
          }
        }
  }
  
  switch( estado)
  {
    case 'a':
    digitalWrite(led1, HIGH);    // primera luz del interior la casa 
    break;
    case 'b':
    digitalWrite(led1, LOW);
    break;
    
    case 'c':
    digitalWrite(led2, HIGH);
    break;
    case 'd':
    digitalWrite(led2, LOW);
    break;
    
    case 'e':
    digitalWrite(led3, HIGH);
    break;  
    case 'f':
    digitalWrite(led3, LOW);
    break;

    case 'g':
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);        // luz pasillo ambas encienden a la vez 
    
    break;  
    case 'h':
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);    // luz pasillo ambas se apagan a la vez 
    break;

    case 'i':
    digitalWrite(led6, HIGH);
    break;  
    case 'j':
    digitalWrite(led6, LOW);
    break;

    case 'k':
    digitalWrite(led7, HIGH);
    break;  
    case 'l':
    digitalWrite(led7, LOW);
    break;

    case 'm':
    digitalWrite(led8, HIGH);
    break;  
    case 'n':
    digitalWrite(led8, LOW);
    break;

    case 'o':
    digitalWrite(led9, HIGH);
    break;  
    case 'p':
    digitalWrite(led9, LOW);    // ultima luz del interior de la casa 
    break;

    case 'q':
    digitalWrite(led10, HIGH);
    digitalWrite(led11, HIGH);      // lucess del jardin  
    digitalWrite(led12, HIGH);
    digitalWrite(led13, HIGH);
    
    break;  
    case 'r':
    digitalWrite(led10, LOW);
    digitalWrite(led11, LOW);     //apagamos luces del jardin 
    digitalWrite(led12, LOW);
    digitalWrite(led13, LOW);
    break;

    case 't':
    digitalWrite(alarma, LOW);    // ultima luz del interior de la casa 
    break;
    
    case 'u':
    digitalWrite(ventilador, HIGH);
    break;
    case 'v':
    digitalWrite(ventilador, LOW);         // encendemos y apagamos ventilador
    break;


  }
  

  {
    LDRabc=analogRead(LDRpin);
    LDRvoltaje=LDRabc*(5.0/1023.0);
    Serial.print("voltaje LDR: ");
    delay(200);
    Serial.println(LDRvoltaje);
    
    if(LDRvoltaje<=1.20){
      digitalWrite(led10, HIGH);    
      delay(500);
      digitalWrite(led11, HIGH);      // luces del jardin encienden de noche
      delay(600);
      digitalWrite(led12, HIGH);
      delay(700);
      digitalWrite(led13, HIGH);
      delay(800);
  
      }

     else {
      
          digitalWrite(led10, LOW);
          digitalWrite(led11, LOW);   // luces del jardin se apagan de dia
          digitalWrite(led12, LOW);
          digitalWrite(led13, LOW);
          
          }
  }
  {
  humedad = dht.readHumidity();

  temp = dht.readTemperature();

  Serial.print("Temperatura:");
  Serial.print(temp);
  Serial.print("ºC Humedad: ");
  Serial.print(humedad);
  Serial.println("%");

  delay(500);

  if (temp < 27){                         // si la temp es menor de 27, el ventilador esta apagado
  digitalWrite(ventilador, LOW);
  }
else
  digitalWrite(ventilador,HIGH);   // ventilador activado
  
  }
   
    }
Logro que funcionen, lo malo que ahora tengo problemas con los delay , son muchos para un solo sketch y pues estube leyendo sobre millis() y los timer, que se pueden remplazar por el delay y permitir al procesador ejecutar las funciones correctamente, pero no tengo ni idea de como hacerlo. Debido a que hay muchos delay, los leds enciende con retraso y los últimos 4 encienden y se apagan repetitivamente al activarlos por el bluetooth.
 
Última edición:
Como mencioné en el código que te publiqué estaba ese potencial problema por que no tienes como indicarle cuando quieres encender, apagar o tenerlo en automático, si lo apagas y el LDR quiere encenderlo entonces lo hará.
 
Atrás
Arriba