Casa "inteligente" con sensor infrarrojo, leds, alarma

¡Buenas!
Soy nueva en este mundillo de arduino, y en mi quinto proyecto me he propuesto hacer una casa "inteligente", con una puerta que funciona con el servomotor y el mando infrarrojo, unos leds que se encienden y apaguen con el mando y una alarma que mediante un sensor de luz se activa o no. El problema es que no consigo que "las tres programaciones" funcionen a la vez, si no que la puerta por separado funciona con ambas, mientras que leds y alarma no.
Os dejo la programación por aquí a ver cual es el fallo que me impide usar "las tres programaciones" a la vez. Seguro que es muy fácil de hacer, pero a mí se me está haciendo cuesta arriba.
Muchas gracias de antemano.

#include <IRremote.h> //Incluimos la libreria del infrarrojo
//Conectaremos el sensor infrarrojo a un pin DIGITAL del Arduino, en este caso sera el pin 2
IRrecv sensor(2); //Inicializamos el sensor infrarrojo, poniendo el pin digital 2 como parametro para maría 3
decode_results lectura; //Variable que va a almacenar la lectura del control infrarrojo

//Incluimos la libreria del servomotor
#include <Servo.h>
Servo servomotor;
int LED_ROJO = 4;
int LED_VERDE = 8;
int LED_AMARILLO = 10;
int posicion_servo = 90; //El servo inicia en 90 grados
const int pinBuzzer = 12; //nuevo zumbador

unsigned long lectura_anterior; //Variable para almacenar la señal anterior recibida

void setup()
{
servomotor.attach(6); //Pin PWM 6 del Arduino donde conectamos el servo
sensor.enableIRIn(); //Habilitamos el sensor infrarrojo para que pueda recibir lecturas
Serial.begin(9600);
sensor.enableIRIn(); // Start the receiver
Serial.begin(9600); //Inicializamos comunicación serie (nuevo zumbador)
pinMode(12, OUTPUT);

}

void loop()

{
if (sensor.decode(&lectura)) //Si recibe una lectura
{
if (lectura.value == 0xFFC23D)
{
lectura_anterior = 0xFFC23D; //La señal anterior corresponde a la tecla "6"
posicion_servo = posicion_servo + 5; //Aumenta el angulo del servo en +5

  if (posicion_servo > 180)
  {
    posicion_servo = 180;                 //No permite que la posicion del servo sea mayor a 180 grados
  }
}

if (lectura.value == 0xFF22DD)
{
  lectura_anterior = 0xFF22DD;            //La señal anterior corresponde a la tecla "4"
  posicion_servo = posicion_servo - 5;    //Disminuye el angulo del servo en -5

  if (posicion_servo < 0)
  {
    posicion_servo = 0;                   //No permite que la posicion del servo sea menor a 0 grados
  }
}

//Si se recibe un 0xFFFFFFFF y la señal anterior recibida es un 0xFFC23D ,tecla "6", quiere decir que se mantiene presionanda la tecla ">" (Derecha)
if (lectura.value == 0xFFFFFFFF && lectura_anterior == 0xFFC23D)
{
  posicion_servo = posicion_servo + 5;    //Aumenta el angulo del servo en +5

  if (posicion_servo > 180)
  {
    posicion_servo = 180;                 //No permite que la posicion del servo sea mayor a 180 grados
  }
}

//Si se recibe un 0xFFFFFFFF y la señal anterior recibida es un 0xFF22DD tecla "4", quiere decir que se mantiene presionanda la tecla "<" (Izquierda)
if (lectura.value == 0xFFFFFFFF && lectura_anterior == 0xFF22DD)
{
  posicion_servo = posicion_servo - 5;     //Disminuye el angulo del servo en -5

  if (posicion_servo < 0)
  {
    posicion_servo = 0;                   //No permite que la posicion del servo sea menor a 0 grados
  }
}

if (lectura.value == 0xFF02FD)          //Corresponde a la tecla "5"
{
  posicion_servo = 90;                  //Regresa el servo a su posicion inicial de 90 grados
}

if (lectura.value == 0xFF629D)        //Corresponde a la tecla "2"
{
  posicion_servo = 180;               //Pone el servo en 180 grados
}

if (lectura.value == 0xFFA857)        //Corresponde a la tecla "8"
{
  posicion_servo = 0;                 //Pone el servo en 0 grados
}
sensor.resume();  //Prepara el sensor infrarrojos para nuevas lecturas
servomotor.write(posicion_servo);  //Manda la posicion al servo
delay(20);

}
if (sensor.decode(&lectura)) { //a partir de aquí, leds habitaciones
Serial.print("0x");
Serial.println(lectura.value, HEX);
sensor.resume(); // Receive the next value
switch (lectura.value) {
case 0xFFA25D: //tecla "1"
digitalWrite(4, HIGH);
break;
case 0xFF906F: //tecla "9"
digitalWrite(4, LOW);
break;
case 0xFFE21D: //tecla "3"
digitalWrite(8, HIGH);
break;
case 0xFF22DD: //tecla "4"
digitalWrite(8, LOW);
break;
case 0xFFC23D: //tecla "6"
digitalWrite(10, HIGH);
break;
case 0xFFE01F: //tecla "7"
digitalWrite(10, LOW);
break;
}
delay(50);
sensor.resume();
}
{
Serial.println(analogRead(A0)); //nuevo zumbador hasta abajo
if (analogRead(A0) < 100) {
digitalWrite(12, HIGH); //generar tono durante 1000 ms
delay(1000);
digitalWrite(12, LOW); //detener tono durante 250 ms
delay(250);
digitalWrite(12, HIGH); //generar tono durante 1000 ms
delay(1000);
}

if (analogRead(A0) > 100) {
  digitalWrite(12, LOW);
}

}
}

Your post was MOVED to it's current location as it is more suitable.

Could you also take a few moments to Learn How To Use The Forum.

It will help you get the best out of the forum in the future.

Tu publicación fue MOVED a su ubicación actual, ya que es más adecuada.

También podría tomar unos minutos para [url = https: //forum.arduino.cc/index.php? Topic = 710766.0] Aprenda a usar el foro [/ url].

Le ayudará a sacar el máximo partido del foro en el futuro.

Hola, vamos a ver te pongo el final de tu códio comentado:

  delay(50);
    sensor.resume();
  }// Este parensis cierra el if (sensor.decode(&lectura)) { //a partir de aquí, leds habitaciones
  {//¿¿¿¿¿¿¿ y este quien lo habre?????????????????
    Serial.println(analogRead(A0)); //nuevo zumbador hasta abajo
    if (analogRead(A0) < 100) {
      digitalWrite(12, HIGH); //generar tono durante 1000 ms
      delay(1000);
      digitalWrite(12, LOW); //detener tono durante 250 ms
      delay(250);
      digitalWrite(12, HIGH); //generar tono durante 1000 ms
      delay(1000);
    }
    if (analogRead(A0) > 100) {
      digitalWrite(12, LOW);
    }
  }
}

Te falta poner lo que hace que se ejecuten ese juego de instrucciones, haber si es por eso.
Saludos.

Moderador
Por favor lee las normas del foro y edita el código de tu post usando etiquetas.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.