Como cambiar delay() por millis o time? arduino

Todo cuanto tiene que ver con la obtención, almacenamiento y proceso de la información digital, sus aplicaciones y el software y hardware utilizado.
Mensaje
Autor
brunomars09
Mensajes: 9
Registrado: Sab Abr 29, 2017 3:21 am
País: España
Ciudad: Barcelona

Re: Como cambiar delay() por millis o time? arduino

#21 Mensaje por brunomars09 »

Si la verdad es que yo tambien en pensado que puede ser el circuito que me este fallando como son varias cosas las que tengo conectadas, los leds, el LDR, el ventialdor 5v el sensor de temperatura , el sensor PIR, el buzzer.

Tratare armar de nuevo el circuito o probar en otra board. Ya que estoy usando dos una grade de 18 cm aprox, para los leds el sensor de temperatura DTH11,el ventilador, un transistor 2N222 y otra board pequeñita para el bluetooth, el sensor LDR, el sensor Pir + buzzer, aparte estoy mirando como alimentar los 3 servomotores que tengo que acoplar para la simulacion de las persianas y la puerta del garaje. Creo que lo hare directamente desde la placa, como no activare los 3 a la vez, me puede funcionar.




Se me ocurre que a lo mejor estas haciendo sonar una alarma de un altavoz o algo solo con la tension del usb que alimenta al arduino y a todo lo demas y en un momento determinado se te viene abajo la tension del USB y se resetea el arduino.
No, estoy usando un buzzer activo, para que haga la funcion de alarma cuando suene.

Probare en un momento, ya que estoy terminando de redactar mi proyecto, ya te contare como me va.

Muchas gracias por la ayuda compañero. Saludos

Avatar de Usuario
mister_electronico
Mensajes: 122
Registrado: Mié Ene 15, 2014 8:44 pm
País: España
Ciudad: Asturias

Re: Como cambiar delay() por millis o time? arduino

#22 Mensaje por mister_electronico »

¿ Tienes conectado todo al USB solo ?

Escucha si haces lo que te dije en el post anterior de dedicar un Led14 a chequeo,

En el void setup() pones
digitalWrite(led14, LOW);

Y modificas la linea void funcion_alarma() la modificas como el te dije en el post anterior.

if (estado=='t'){ bandera=0; digitalWrite(led14, HIGH);} //si estado es igual a "t" vuelve activar la alarma.

Si esta conectada la chicharra y vez que se enciend el led y se apaga y no funciona.

Lo siguiente es que quites la chicharra y si vez que el led se mantiene es que se te esta callendo por consumo.

Saludos.

brunomars09
Mensajes: 9
Registrado: Sab Abr 29, 2017 3:21 am
País: España
Ciudad: Barcelona

Re: Como cambiar delay() por millis o time? arduino

#23 Mensaje por brunomars09 »

Al final puede hacerlo de la siguiente forma con un amigo que también sabe de c++, el problema era el código. Te lo adjunto para que tmb puedas verlo.

De hecho pude agregar tambien los servomotores que necesitaba.

Código: Seleccionar todo

//indicamos los pines donde hay componentes conectados
//comedor                        
    int ledcom1=40;              //led 1 del comedor
    int ledcom2=41;              //led 2 del comedor
    int percomsubir=39;          //persiana del comedor sube
    int percombajar=38;          // persiana del comedor baja
    int percom2subir=37;           // persiana 2 del comedor sube
    int percom2bajar=36;           // persiana 2 del comedor baja
//cocina
    int ledcocina=42;            // led de la cocina
   
//baño
    int ledlavabo=47;            //led del baño
  
//hab 1
    int ledh1=45;                //led de la habitación 1
   
//hab 2
    int ledh2=46;                // led de la habitación 2
    
   
//garaje
    int ledgaraje=48;            // led del garaje
    int ldrgaraje=A1;          // infrarojo del garaje
     #include <Servo.h>          // incluimos librería para trabajar con servomotores
     Servo servogaraje;          // nombramos nuestro servo
     
//pasillo
     int ledpas1=43;             // led 1 del pasillo
     int ledpas2=44;             // led 2 del pasillo
    
//jardín
     int ledjar1=49;             // led 1 del jardín
     int ledjar2=50;             // led 2 del jardín
     int ledjar3=51;             // led 3 del jardín
     int ledjar4=52;             // led 4 del jardín
    
    
     int ldrjar=A2;              //ldr del jardín
     int valorldrjar;             // variable para almacenar el valro de la ldr del jardín
    
 
// TEMPERATURA Y HUMEDAD
    #include <DHT.h>             //incluimos la librería para trabajar con el sensor DHT11
    #define DHTPIN 33            // indicamos el pin en el que está conectado el sensor
    #define DHTTYPE DHT11        // indicamos el tipo de sensor
   
    DHT dht(DHTPIN, DHTTYPE);
   
    int ventilador=32;        //ventilador
    int ledcal=35;             //led que indica que hace calor
    int ledfr=34;             //led que indica que hace frío y simula la calefacción
    
//ALARMA
    int alarma=30;            //alarma contra intrusos y a la vez de incendios
    int piralarma=31;         //sensor pir que detecta movimiento
    int piralarmaState;       //variable para almacenar el valor del sensor pir
 
//bluetooth
 int estado=0;                    //variable que indica el estado del bluetooth
void setup(){
 Serial.begin(9600);              //inicializamos la comunicación serial a una velocidad de 9600 bps (baudios)
 
      pinMode(ledcom1, OUTPUT);         //declaramos las entradas y las salidas de los pines digitales
      pinMode(ledcom2, OUTPUT);
      pinMode(percomsubir, OUTPUT);
      pinMode(percombajar, OUTPUT);
      pinMode(percom2subir, OUTPUT);
      pinMode(percom2bajar, OUTPUT);
     
      pinMode(ledcocina, OUTPUT);
     
      pinMode(ledlavabo, OUTPUT);
      
     
      pinMode(ledh1, OUTPUT);
     
           
      pinMode(ledh2, OUTPUT);
    
     
      pinMode(ledgaraje, OUTPUT);
      pinMode(ldrgaraje, INPUT);
      servogaraje.attach(35);
     
      pinMode(ledpas1, OUTPUT);
      pinMode(ledpas2, OUTPUT);
     
     
      pinMode(ledjar1, OUTPUT);
      pinMode(ledjar2, OUTPUT);
      pinMode(ledjar3, OUTPUT);
      pinMode(ledjar4, OUTPUT);
     
 //TEMPERATURA Y HUMEDAD
      dht.begin();               //se inicia el sensor DHT11
      pinMode(ventilador, OUTPUT);
      pinMode(ledcal, OUTPUT);
      pinMode(ledfr, OUTPUT);
     
 //ALARMA
      pinMode(alarma, OUTPUT);
      pinMode(piralarma, INPUT);
 
}
 
void loop() {
 
    if(Serial.available()>0){      //comprobamos que el BT está recibiendo datos
           estado= Serial.read();       //si es así, leer el dato que recibe y almacenarlo en la variable estado
             }
 
    if (estado=='a'){              //si estado es igual a "a"
        digitalWrite (ledcom1, HIGH);    //encender ledcom1
         }
    if (estado=='b'){                //si estado es igual a "b"
        digitalWrite (ledcom1, LOW);     //apagar ledcom1
         }
    if (estado=='c'){                //si estado es igual a "c"
        digitalWrite (ledcom2, HIGH);    //encendere ledcom2
         }
    if (estado=='d'){                 //si estado es igual a "d"
        digitalWrite (ledcom2, LOW);     // apagar ledcom2
        }
    if (estado=='e'){             //si estado es igual a "e"
        digitalWrite (percomsubir, HIGH);  //subir persiana del comedor
        delay(2000);
        digitalWrite (percomsubir, LOW); 
        delay(3000);
        }
    if (estado=='f'){               //si estado es igual a "f"
       digitalWrite (percombajar, HIGH); //bajar persiana del comedor
       delay(2000);
       digitalWrite (percombajar, LOW);
       delay(3000);
       }
    if (estado=='1'){              //si estado es igual a "1"
      digitalWrite (percomsubir, LOW);  // detener persiana
      digitalWrite (percombajar, LOW);
      }
    if (estado=='g'){                //si estado es igual a "g"
      digitalWrite (ledcocina, HIGH);   //encender ledcocina
     }
   if (estado=='h'){                //si estado es igual a "h"
      digitalWrite (ledcocina, LOW);    //apagar ledcocina
     }
   if (estado=='i'){                //si estado es igual a "i"
      digitalWrite (ledlavabo, HIGH);   //encender ledlavabo
     }
 
   if (estado=='j'){                //si estado es igual a "j"
      digitalWrite (ledlavabo, LOW);    //apagar ledlavabo
     }
   if (estado=='k'){                 // si estado es igual a "k"
      digitalWrite (ledh1, HIGH);       //encender ledh1
     }
   if (estado=='l'){                 //si estado es igual a "l"
      digitalWrite (ledh1, LOW);        //apagar ledh1
     }
   if (estado=='m'){                 //si estado es igual a "m"
     digitalWrite (ledh2, HIGH);       //encender ledh2
    }
   if (estado=='n'){                 //si estado es igual a "n"
     digitalWrite (ledh2, LOW);        //apagar ledh2
    }
   if (estado=='o'){                  //si estado es igual a "o"
     digitalWrite (percom2subir, HIGH);  //subir persiana de la h2
     delay(2000);
     digitalWrite (percom2subir, LOW);
     delay(3000);
    }
   if (estado=='p'){                 //si estado es igual a "p"
     digitalWrite (percom2bajar, HIGH);  //bajar persiana de la h2
     delay(2000);
     digitalWrite (percom2bajar, LOW);
     delay(3000);
    }
   if (estado=='2'){                 //si estado es igual a "2"
     digitalWrite (percom2subir, LOW);    //para la persiana
     digitalWrite (percom2bajar, LOW);
    }
   if (estado=='A'){                 //si estado es igual a "A"
     digitalWrite (ledgaraje, HIGH);   //encender ledgaraje
    }
   if (estado=='B'){                //si estado es igual a "B"
     digitalWrite (ledgaraje, LOW);    //apagar ledgaraje
    }
int ldrStatus=analogRead(ldrgaraje);  //leer el valor del LDR y almacenarlo en la variable ldrstatus
     if (estado=='C'&& ldrStatus <600){   //si estado es igual a "C" y ldr detecta
     servogaraje.write(110);       //abrir la puerta del garaje
     delay(3000);
     servogaraje.write(70);
     delay(500);
     servogaraje.write(30);
     delay(300);
     servogaraje.write(10);      //esperar a que el coche entre
     delay(7000);
     servogaraje.write(30);                   // y cerrarla
     delay(500);
     servogaraje.write(70);
     delay(500);
     servogaraje.write(110);
     delay(500);
    } 
   if (estado=='s'){                 //si estado es igual a "s"
      servogaraje.write(110);       //mantén cerrada la puerta
     }
     
   if (estado=='t'){                 //si estado es igual a "t"
     digitalWrite (ledpas1, HIGH); //encender luces del pasillo
     digitalWrite (ledpas2, HIGH);
    }
   if (estado=='u'){                //si estado es igual a "u"
     digitalWrite (ledpas1, LOW);    //apagar luces del pasillo
     digitalWrite (ledpas2, LOW);
     }
   if (estado=='v'){               //si estado es igual a "v"   
    analogWrite (ledjar1, 0);     //Apaga las luces del jardín
    analogWrite (ledjar2, 0);
    analogWrite (ledjar3, 0);
    analogWrite (ledjar4, 0);
     }
 
   if (estado=='w'){                   
    analogWrite (ledjar1, 51);
    analogWrite (ledjar2, 51);
    analogWrite (ledjar3, 51);
    analogWrite (ledjar4, 51);
     }
  if (estado=='x'){
    analogWrite (ledjar1, 153);
    analogWrite (ledjar2, 153);
    analogWrite (ledjar3, 153);
    analogWrite (ledjar4, 153);
     }
  if (estado=='y'){                //si estado es igual a "y" 
    analogWrite (ledjar1, 255);    //enciende del todo las luces del jadín
    analogWrite (ledjar2, 255);
    analogWrite (ledjar3, 255);
    analogWrite (ledjar4, 255);
     }

  if (estado=='3'){                //si estado es igual a "3" 
    float t = dht.readTemperature();   //muestra el valor de la temperatura y humedad de la casa
    float h = dht.readHumidity();
    Serial.print ("Temperatura: ");
    Serial.print (t);
    Serial.print ("\     ");
    Serial.print ("Humedad: ");
    Serial.print(h);
    delay(3000);
  }
 
 if (estado=='4'){                    //si estado es igual a "4" 
    digitalWrite (ventilador, HIGH);   //enciende ventilador
   }
 if (estado=='5'){                //si estado es igual a "5" 
    digitalWrite (ventilador, LOW);    //apaga ventilador
   }
 if (estado=='6'){                 //si estado es igual a "6" 
    piralarmaState = digitalRead(piralarma);    //estado del pir alarma será igual al valor que lea del sensor
     valorldrjar = analogRead(ldrjar);           //almaceno en la variable valorldrjar el valor de la ldr
 
      if (piralarmaState==HIGH) {           //si hay intrusos
         digitalWrite(alarma, HIGH);           //activa alarma
         delay(500);
 
            if(valorldrjar < 300) {    //y si además es de noche
              digitalWrite(ledjar1, HIGH);    //enciende las luces del jardín
              digitalWrite(ledjar2, HIGH);
              digitalWrite(ledjar3, HIGH);
              digitalWrite(ledjar4, HIGH);
             }else {                     //si no es de noche
                digitalWrite (ledjar1, LOW);   //no enciendas las luces del jardín
                digitalWrite (ledjar2, LOW);
                digitalWrite (ledjar3, LOW);
                digitalWrite (ledjar4, LOW);
                }
           }
       }     
         
     if (estado=='7'){               //si estado es igual a "7" 
           digitalWrite(alarma, LOW);       //desactiva alarma
          }
   }
Con esto me va todo perfectamente, de igual forma muchas gracias amigo, de entre todos los foros que consulte en este fue el único donde me daban una respuesta guiada, ya que como no se casi nada de programación en C+, se me hacia difícil todo esto.

Si hay alguna forma aquí en el foro de recomendarte o puntuarte por la ayuda házmelo saber :D

Saludos Compañero

Avatar de Usuario
mister_electronico
Mensajes: 122
Registrado: Mié Ene 15, 2014 8:44 pm
País: España
Ciudad: Asturias

Re: Como cambiar delay() por millis o time? arduino

#24 Mensaje por mister_electronico »

Me alegra que te funcione, asi que la maxima si la cosa funciona mejor no tochallo...jejeje.

Bueno espero que te vaya bien con el proyecto..

Saludos.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados