Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: brunomars en 28 Abril 2017, 12:29 pm



Título: Ayuda con codigos de arduino, Activar/Desactivar sensor PIR via Bluetooh?
Publicado por: brunomars en 28 Abril 2017, 12:29 pm
Soy nuevo con el arduino, pero mirando foros y tutoriales cosegui armar este codigo para que  funcione mi proyecto en el cual tengo que prender y apagar leds, usar un sensor LDR, sensor de movimiento y servomotores todo manejado a traves de un modulo de bluetooth con una app para el movil

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


En este primer codigo logre manjear los leds y el sensor ldr, el problema es cuando junte estos codigos con uno para un sensor pir para menjarlo por bluetooth, ya que logro juntar todos los codigos, y logro manejar el sensor PIR por el bluetooth pero los led ahora no me responden, exepto cuando se activan con el Sensor LDR, si pudieran ayudar en corregir el codigo que he armado, lo agradeceria bastante, ya que hay algo que falla dentro del codigo  pero no se que es y que crea conflicto pero no se que es porque soy novato con el arduino. Gracias de antemano.


Título: Re: Ayuda con codigos de arduino, Activar/Desactivar sensor PIR via Bluetooh?
Publicado por: MAFUS en 28 Abril 2017, 15:45 pm
¿Y si empiezas con algo más sencillo y te centras solo en la comunicación bluetooth? Cuando sepas manejarla podrás juntarla con el resto del código. De todas formas te diría que intentaras usar el modelo de trabajo que usan los PLC:

1. Comunicación con el exterior. Serial COM, USB, Bluetooth.
2. Leer las entradas.
3. Ejecución del programa, cálculos, acciones, etc.
4. Refresco de las salidas.
5. Vuelta al punto 1.

Como puedes ver es una máquina de estados con trabajos bien definidos y fácil de depurar.