Go Down

Topic: Como corrige este codigo ? (Read 168 times) previous topic - next topic

Bruno_Mars

Alguien me hecha un cable con esto, he estado armando mi proyecto poco a poco, primero fueron las luces, luego un sensor LDR, luego un sensor PIR, 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 poder encenderlo con la app del móvil. Si hay forma de mejorar el codigo, se agradeceria bastante.

Code: [Select]


#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 "s" 
    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 "t" 
           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 < 22){//cambiar numero en funcion de lo que se desee
  digitalWrite(ventilador, LOW);
  }
else
  digitalWrite(ventilador,HIGH);
 
  }
   
// PROBLEMAS QUE TENEMOS: EN VENTILADOR FUNCIONA Y SE ENCIENDE AUTOMATICAMENTE, PERO UNA VEZ QUE LO PRENDEMOS Y APAGAMOS DIRECTAMENTE VIA  BLUETOOTH YA NO ENCIENDE DE FORMA AUTOMATICA POR ORDEN DEL SENSOR
// LOS LEDS ENCIENDEN CON RETRASO , CUANDO ENCENDEMOS LOS LEDS DEL JARDIN VIA BLUETOTTSE PRENDEN Y SE APAGAN, Y CUANDO LO HACEMOS DESDE EL SENSOR LDR SE APAGA LUEGO DE UNOS SEGUNDOS COMO SI EL DELAY () LES AFECTARA
// FALTA AGREGAR CODIGOS PARA MANEJAR 3 SERVOMOTORES  2 A 360ª SIMULANDO UNA PERSIANA Y 1 PARA LA PUERDA DEL GARAJE DE CASA (ABRIR/CERRAR)
 


No se si seran por los  delay ya que e puesto varios dentro del 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.

surbyte

Creo habertelo respondido pero si no fue el caso lo digo ahora.
Ve a Documentación y verás un hilo con el nombre Maquina de estados. Lee la teoría al respecto. La necesitarás para entender como trabaja algo que usa millis() para reformar tu código.

Luego busca una respuesta mia o un aporte donde explico menciono como modifiqué un código de un forero que presentaba un problema similar al tuyo. De hecho lo hice varias veces.

Tomando como ejemplo ese código podras modificar el tuyo. No es dificil cuando entiendes como funciona y cambias la forma de ver el programa tal como lo concibes ahora al nuevo formato usando millis();


Go Up