Pages: [1]   Go Down
Author Topic: novato duda multitarea  (Read 1200 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas gurus del arduino, me surge una duda de novato que no me deja avanzar con mi proyecto, y os pido que me echeis una mano.

Estoy trasteando con un menu, libreria menu backend, unos pulsadores y una funcion de encendido y apagado de leds con temporizador (delay) .
El problema es que cuando a traves del menu activo el led temporizado en 30 segundos, delay(30000), no puedo realizar otra accion con el arduino hasta que el tiempo termine.

Me podeis dar una solucion para la "multitarea"? smiley

Un saludo a todos.
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La solución la tienes en el ejemplo del IDE "BlinkWithoutDelay".

http://arduino.cc/es/Tutorial/BlinkWithoutDelay
Logged


Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas gurus del arduino, me surge una duda de novato que no me deja avanzar con mi proyecto, y os pido que me echeis una mano.

Estoy trasteando con un menu, libreria menu backend, unos pulsadores y una funcion de encendido y apagado de leds con temporizador (delay) .
El problema es que cuando a traves del menu activo el led temporizado en 30 segundos, delay(30000), no puedo realizar otra accion con el arduino hasta que el tiempo termine.

Me podeis dar una solucion para la "multitarea"? smiley

Un saludo a todos.

De todas formas es un error de concepto de programacion.

Si tienes un tiempo tan largo (30 segundos) deja que el arduino haga otras cosas, no emplees delay, simplemente comprueba cada x tiempo que tu reloj no haya llegado a los 30 segundos.

Tienes unas librerias llamadas time y otra que no recuerdo ahora mismo para trabajo con tiempos sin necesidad de un RTC pero si te digo la verdad, yo, en tu caso, emplearia un RTC que cuesta dos duros y te da mucho margen de juego.

Pero insisto, es un concepto de programacion, no una multitarea lo que necesitas.

Planteate como te digo, en vez de esperar, cambiar tu programa a que vaya "testeando" el tiempo para ver si ha llegado o superado los 30 segundos y si es asi ejecutas lo que sea y si no... continuas con la faena que le tengas encomendada.

Un saludo.
Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias por el planteamiento, tengo un RTC por aquí así que me meto en faena con ello y a ver que saco de bueno con ello.

Un saludo  smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intentando ir un poco mas alla y gracias a vuestros consejos, la funcion millis() es perfecta para mantener un led fijo durante un tiempo. Pero lo que intento es conseguir un incremento de la luminosidad tipo 'fade', como podria plantear esto usando millis()? haga lo que haga, bien el led queda fijo o bien realiza el fading pero el arduino se queda realizando solo ese proceso. smiley-roll-sweat

Saludos


Logged

Palencia, Spain
Online Online
God Member
*****
Karma: 25
Posts: 544
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prueba, pero sobre todo intenta entender este código:
Code:
long time_actual, time_anterior;
byte brillo;
void setup() {
    time_anterior=millis();
}

void loop() {
    time_actual=millis(); //TOMAMOS LA LECTURA DE MILLIS ACTUAL PARA CALCULAR TIEMPO TRANSCURRIDO
    brillo=((time_actual-time_anterior)/100)%256; //CALCULAMOS, A PARTIR DEL TIEMPO TRANSCURRIDO EL PWM QUE DESEAMOS OBTENER. ESTO ES SÓLO UN EJEMPLO
    analogWrite(PIN,brillo);
    /*
    AQUÍ REALIZAMOS OTRAS ACCIONES REQUERIDAS EN EL LOOP. CUANDO VOLVAMOS AL PRINCIPIO VEREMOS CUÁNTO TIEMPO HA TRANSCURRIDO
    */ 
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias Noter, voy a trabajar con esto.  smiley
Logged

Pages: [1]   Go Up
Jump to: