Como cambiar delay() por millis o time? arduino
- 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
Intenta con este codigo a ver que tal te va.... manteniedolo como tu lo escribes, ordenandolo de otra forma y no no permitiendo ambiguedad entre control bluetooth y control por sensores para no dejar nada al azar.
Es dificil depurar el codigo si no se tiene el circuito montado.
http://www.mediafire.com/file/4uokyk43u ... motica.ino
Saludos
Es dificil depurar el codigo si no se tiene el circuito montado.
http://www.mediafire.com/file/4uokyk43u ... motica.ino
Saludos
-
- 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
Muchas gracias compañero, ya probé el código, mejora el error de las luces del jardin al encenderlas lo malo que ahora parece que la función de la alarma no la ejecuta, no la puedo desactivar.
- 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
La alarma segun programa se activa enviandole el caracter "s" atraves de bluetooth
y se desactiva enviando el caracter "t".
Tambien para la luz del jardin "q" activa las luces y "r" las desactiva pero si aprietas esta teclas ya no se pueden activar o desactivar por LDR, para poderlo hacer y aqui acabo encontrar un error que puse dupiclada la funcion de la tecla "s" en el siguiente codigo cambia la "s" por la "y"
**********************************
void funcion_luzjardin()
{
if (estado=='q'){ bandera2=1 ; } // activo bandera2 y ya no permito que actue el LDR.
if (estado=='r'){ bandera2=1 ; } // activo bandera2 y ya no permito que actue la LDR.
if (estado=='s'){ bandera2=0 ; } // La "s" cambiala por la "y" en esta linea.
**********************************
Lo mismo para el ventilador "u" y "v" activan y desactivan el ventilador por bluetooth pero si lo haces asi desactivas el sensor de temperatura.
La letra "x" vuelve a permitir el funcionamiento por sensor de temperatura.
Saludos
y se desactiva enviando el caracter "t".
Tambien para la luz del jardin "q" activa las luces y "r" las desactiva pero si aprietas esta teclas ya no se pueden activar o desactivar por LDR, para poderlo hacer y aqui acabo encontrar un error que puse dupiclada la funcion de la tecla "s" en el siguiente codigo cambia la "s" por la "y"
**********************************
void funcion_luzjardin()
{
if (estado=='q'){ bandera2=1 ; } // activo bandera2 y ya no permito que actue el LDR.
if (estado=='r'){ bandera2=1 ; } // activo bandera2 y ya no permito que actue la LDR.
if (estado=='s'){ bandera2=0 ; } // La "s" cambiala por la "y" en esta linea.
**********************************
Lo mismo para el ventilador "u" y "v" activan y desactivan el ventilador por bluetooth pero si lo haces asi desactivas el sensor de temperatura.
La letra "x" vuelve a permitir el funcionamiento por sensor de temperatura.
Saludos
-
- 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
Si es parte la entiendo, lo que trato de decir es que al ejecutar el código ya de por si la alarma esta activa, no inicia desactivada, y cuando suena y la quiero desactivar enviando desde la app el carácter ' t' , no se desactiva solo alcanza a hacer una pequeñas interrupciones cada vez que envio la letra 't' pero no la llega a apagar, a eso me refería. Pense que hacer este proyecto de la casa domotica iba ser mas facil por los videos que hay en youtube y eso pero nada . Gracias por la ayuda compañero, Intentare seguir a avanzando de todas formas.
- 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
Jejeje... paciencia compañero los proyectos por tontos que sean son para tirarse de los pelos.... hay que tener mucha tranquilidad.Pense que hacer este proyecto de la casa domotica iba ser mas facil por los videos que hay en youtube y eso pero nada .
Con respecto a la alarma.
Código: Seleccionar todo
Si es parte la entiendo, lo que trato de decir es que al ejecutar el código ya de por si la alarma esta activa, no inicia desactivada
digitalWrite(alarma, LOW);
Luego compañero me estoy dando cuenta de otra cosa y es que no tienes en el codigo original nada que detecte si la alarma esta activa o no .
osea que en el void funcion_alarma()
Al final mete las tres siguientes lineas:
if (estado==0){ piralarmaState = digitalRead(piralarma); } //desactiva alarma
if ((piralarmaState==HIGH) && ( bandera==0 )) { //si hay intrusos
digitalWrite(alarma, HIGH); } //activa alarma
if ((piralarmaState==LOW) && (bandera==0)) { //si hay intrusos
digitalWrite(alarma, LOW); } //activa alarma
Hazlo y cuentame a ver que pasa, voy muy deprisa y no me da tiempo a analizar nada mas.
Saludos.
- 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
Perdon antes fui muy rapido y no me dio tiempo a contestarte bien.
Haz como te dije en la ultima linea de void setup()
digitalWrite(alarma, LOW);
Y la funcion void funcion_alarma()
Sustituyela completamente por esta:
void funcion_alarma()
{
if (estado=='s'){ bandera=1 ; digitalWrite(alarma, LOW); } // Desactiva la alarma.
if (estado=='t'){ bandera=0; } //si estado es igual a "t" vuelve activar la alarma.
if (bandera=0) { piralarmaState = digitalRead(piralarma); } // si la alarma esta activa lee el sensor.
if ((piralarmaState==HIGH) && ( bandera==0 )) { // Si la alarma esta activa y el sensor esta activado
digitalWrite(alarma, HIGH); } // activa alarma
if ((piralarmaState==LOW) && (bandera==0)) { //Si la alarma esta activa y el sensor esta desactivado
digitalWrite(alarma, LOW); } // desactiva alarma
}
Tienes que tener en cuenta que tal como esta el programa ahora la alarma empieza desactivada por que al inicio del programa bandera=0, pero esta vez espero que sin sonar por que en el void setup pusimos digitalWrite(alarma, LOW);
Pruebalo y cuentame.
Saludos.
Haz como te dije en la ultima linea de void setup()
digitalWrite(alarma, LOW);
Y la funcion void funcion_alarma()
Sustituyela completamente por esta:
void funcion_alarma()
{
if (estado=='s'){ bandera=1 ; digitalWrite(alarma, LOW); } // Desactiva la alarma.
if (estado=='t'){ bandera=0; } //si estado es igual a "t" vuelve activar la alarma.
if (bandera=0) { piralarmaState = digitalRead(piralarma); } // si la alarma esta activa lee el sensor.
if ((piralarmaState==HIGH) && ( bandera==0 )) { // Si la alarma esta activa y el sensor esta activado
digitalWrite(alarma, HIGH); } // activa alarma
if ((piralarmaState==LOW) && (bandera==0)) { //Si la alarma esta activa y el sensor esta desactivado
digitalWrite(alarma, LOW); } // desactiva alarma
}
Tienes que tener en cuenta que tal como esta el programa ahora la alarma empieza desactivada por que al inicio del programa bandera=0, pero esta vez espero que sin sonar por que en el void setup pusimos digitalWrite(alarma, LOW);
Pruebalo y cuentame.
Saludos.
- 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
No se por que no me deja editar el foro los mensajes que he escrito yo.....
El post anterior es correcto pero el codigo de funcion funcio_alarma() en las dos ultimas lineas dentro de las dos condiciones if se me colo el comentario dentro de los corchetes { } lo cual no es muy correcto, pero no lo puedo editar para cambiarlo..... demasiadas prisas.
Un saludo.
El post anterior es correcto pero el codigo de funcion funcio_alarma() en las dos ultimas lineas dentro de las dos condiciones if se me colo el comentario dentro de los corchetes { } lo cual no es muy correcto, pero no lo puedo editar para cambiarlo..... demasiadas prisas.
Un saludo.
-
- 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
Ahora esta asi :
Sucede que ahora la alarma esta desactivada totalmente, no me deja activarla via bluetooth, esto es un dolor de cabeza jaja
Código: Seleccionar todo
#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;
int bandera= 0;
int bandera1=0;
int bandera2= 0;
int bandera3= 0;
//bluetooth
int estado = 0;
int LDRpin=A1; // define el pin conectado al LDR
int LDRabc=0;
float LDRvoltaje=0; // variable tipo flotante
int alarma=33; //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
digitalWrite(alarma, LOW);
}
void loop(){
if( Serial.available()>0) {
estado = Serial.read();
funcion_luces();
}
funcion_alarma();
funcion_luces();
funcion_luzjardin();
funcion_ventilador();
estado = 0;
}
void funcion_alarma()
{
if (estado=='s'){ bandera=1 ; digitalWrite(alarma, LOW); } // Desactiva la alarma.
if (estado=='t'){ bandera=0; } //si estado es igual a "t" vuelve activar la alarma.
if (bandera=0) { piralarmaState = digitalRead(piralarma); } // si la alarma esta activa lee el sensor.
if ((piralarmaState==HIGH) && ( bandera==0 ))
{ digitalWrite(alarma, HIGH); } // activa alarma
if ((piralarmaState==LOW) && (bandera==0))
{ digitalWrite(alarma, LOW); } // desactiva alarma
}
void funcion_luces() // para manejar luces de casa.
{
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;
}
}
void funcion_luzjardin() // Para manejar luces jardin.
{
if (estado=='q'){ bandera2=1 ; } // activo bandera2 y ya no permito que actue el LDR.
if (estado=='r'){ bandera2=1 ; } // activo bandera2 y ya no permito que actue la LDR.
if (estado=='y'){ bandera2=0 ; } // desactivo bandera2 y permito que actue la LDR.
if ((estado=='q') && (bandera2==1)) { //si hay intrusos
digitalWrite(led10, HIGH);
digitalWrite(led11, HIGH); // lucess del jardin
digitalWrite(led12, HIGH);
digitalWrite(led13, HIGH);
}
if ((estado=='r') && (bandera2==1)) { //
digitalWrite(led10, LOW);
digitalWrite(led11, LOW); //apagamos luces del jardin
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
if ( bandera2==0 ) {
LDRabc=analogRead(LDRpin);
LDRvoltaje=LDRabc*(5.0/1023.0);
Serial.print("voltaje LDR: ");
Serial.println(LDRvoltaje);
}
if ((LDRvoltaje<=1.20) && (bandera2==0)){
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);
}
if ((LDRvoltaje>1.20) && (bandera2==0)){
digitalWrite(led10, LOW);
digitalWrite(led11, LOW); // luces del jardin se apagan de dia
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
}
void funcion_ventilador() // Para manejar ventilador y lectura humedad y envio de datos puerto.
{
if (estado=='u'){ bandera3=1 ; } // activo bandera3 y ya no permito que actue el sensor temperatura.
if (estado=='v'){ bandera3=1 ; } // activo bandera3 y ya no permito que actue el sensor temperatura.
if (estado=='x'){ bandera3=0 ; } // desactivo bandera3 y permito que actue el sensor temperatura.
if ((estado=='u') && (bandera3==1)) { //
digitalWrite(ventilador, HIGH);
}
if ((estado=='v') && (bandera3==1)) { //
digitalWrite(ventilador, LOW);
}
humedad = dht.readHumidity();
temp = dht.readTemperature();
// ¿¿ es necesario que por el puerto serie envies constantemente el valor de la temperatura y la humedad ??
Serial.print("Temperatura:");
Serial.print(temp);
Serial.print("ºC Humedad: ");
Serial.print(humedad);
Serial.println("%");
if ((temp < 22) && (bandera3==0)) {//cambiar numero en funcion de lo que se desee
digitalWrite(ventilador, LOW);
}
if ((temp > 22) && (bandera3==0)){//cambiar numero en funcion de lo que se desee
digitalWrite(ventilador, HIGH);
}
}
- 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
Pues deberia funcionar, asegurate que el pin de entrada de activacion de alarma se poner realmente a nivel alto y bajo de verdad.
O que el bluetooth manda las ordenes correctamente, y realmente.
Yo lo que hago normalmente en la depuraccion de codigo es dedicar una patita de salida de micrococontrolador para encender un led y asi me aseguro que entro y se ejecuta la parte del codigo correspondiente.
Asi por ejemplo diseño una nueva salida la de led y se lo coloco.
int led14 = 53; // led para chequeo. Ojo no se si esta patilla es correcta compruebalo.
Y asi por ejemplo en lla linea de codigo por ejemplo que quiero chequear
if (estado=='t'){ bandera=0; } //si estado es igual a "t" vuelve activar la alarma.
para ver si funciona pongo.
if (estado=='t'){ bandera=0; digitalWrite(led14, HIGH); } //si estado es igual a "t" vuelve activar la alarma.
Y asi chequeo que que realmente el bluetooth activa realmente la alarma.
Y asi para otras lineas.
Algo te esta fallando por que este codigo si deberia de funcionar.
Comprueba a ver y me cuentas..... saludos
O que el bluetooth manda las ordenes correctamente, y realmente.
Yo lo que hago normalmente en la depuraccion de codigo es dedicar una patita de salida de micrococontrolador para encender un led y asi me aseguro que entro y se ejecuta la parte del codigo correspondiente.
Asi por ejemplo diseño una nueva salida la de led y se lo coloco.
int led14 = 53; // led para chequeo. Ojo no se si esta patilla es correcta compruebalo.
Y asi por ejemplo en lla linea de codigo por ejemplo que quiero chequear
if (estado=='t'){ bandera=0; } //si estado es igual a "t" vuelve activar la alarma.
para ver si funciona pongo.
if (estado=='t'){ bandera=0; digitalWrite(led14, HIGH); } //si estado es igual a "t" vuelve activar la alarma.
Y asi chequeo que que realmente el bluetooth activa realmente la alarma.
Y asi para otras lineas.
Algo te esta fallando por que este codigo si deberia de funcionar.
Comprueba a ver y me cuentas..... saludos
- 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
Otra cosa que puede ocurrir es que te este fallando la alimentacion, si la alimentacion no es estable el microcontrolador se te resetea y vuelve a empezar de nuevo.
Los contactos de las board muchas veces no son muy estables.
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.
Salduos.
Los contactos de las board muchas veces no son muy estables.
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.
Salduos.
¿Quién está conectado?
Usuarios navegando por este Foro: Bing [Bot] y 0 invitados