Pages: [1]   Go Down
Author Topic: [Solucionado] Problemilla usando millis()  (Read 1555 times)
0 Members and 1 Guest are viewing this topic.
Málaga
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues veréis, quiero coger el tiempo entre dos sucesos, y para ello hago millis() en una parte del código sobre una variable unsigned long tiempo y en otra parte del código hago un millis() sobre una variable unsigned long tiempo2. La cosa está en que una de las variables se va incrementando solita cuando va pasando el tiempo y la otra está a 0 (a 0 está tiempo2, la segunda en hacerle millis).

He pensado en hacer millis en una sola variable y al empezar esa parte del programa copiarla en otra para así tener la referencia y si vuelvo a entrar en esa parte del código hacer lo mismo otra vez, pero por lo que se ve si copio una variable en la que guardé lo que devuelve millis en otra, también se va a ir incrementando cuando pasa el tiempo. No sé si la he liado en el código o si es que no entiendo bien cómo funciona millis.

Lo que yo entiendo que hace millis es devolver el valor de tiempo en milisegundos desde que conecté la placa o desde que la reseteé. Ese valor se va a ir actualizando solito.
« Last Edit: February 16, 2012, 07:32:02 am by Rido » Logged

Sevilla City
Offline Offline
Newbie
*
Karma: 0
Posts: 13
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bueno como tu dices millis es una función que devuelve un contador que inicializa la librería de arduino y va incrementando con cada milisegundo, échale un ojo a este tutorial simple que usa el millis a ver si lo ves mas claro. http://arduino.cc/es/Tutorial/BlinkWithoutDelay
Logged


Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Me gustaria ver la linea en la que copias la variable... ¿No estaras copiando el puntero en lugar de su contenido?
Logged

Málaga
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Te pongo "más o menos" lo que estoy haciendo, porque creo que es básicamente lo mismo que en ese ejemplo, es muy cortito:

unsigned long currentTime;
unsigned long initialTime;
currentTime = millis();
initial = currentTime;
unsigned long tiempo3 = 1875;

while(currentTime-tiempo <= tiempo3)
{
    //hago cosas que tardan, más un delay que le meto
    //imprimo con el Serial.println() ambas variables y ambas valen lo mismo
       //y además ambas están incrementadas...
}

¿No se supone que currentTime debería ir aumentando y que tiempo debería quedarse igual?

PD: Acabo de leer el segundo comentario, sí, huele bastante a puntero copiado, pero yo creía que unsigned int era un unsigned int, no sé por qué se copian punteros ahí. Soy totalmente novato con arduino.
Logged

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

Creo que tendrías que poner tu código más ampliado, que incluya la parte donde inicializas "tiempo" y le asignas los millis. Y también que se vea claro la parte que tienes en el setup y en el loop.
Logged


Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 751
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prueba este código para que entiendas como funciona. salió hace poco en este post

http://arduino.cc/forum/index.php/topic,89264.msg684695.html#msg684695

dependiendo de los if o while y como manejes las temporizaciones puedes hacer que unas dependan de otras y demás

un saludo

Code:
long tiempofuncion1 = 1000; // cada segundo
long tiempofuncion2 = 3000; // cada 3 segundos
long TiempoInicial1;
long TiempoInicial2;

void setup() {
  Serial.begin(9600);
  TiempoInicial1=millis(); // inicia la variable al momento actual para temporizador 1
  TiempoInicial2=millis(); // inicia la variable al momento actual para temporizador 2
}

void loop() {
 
   if (millis() >= (TiempoInicial1+tiempofuncion1)) {
      funcion1();
      TiempoInicial1=millis();    // reset de inicio
   }
 
   if (millis() >= (TiempoInicial2+tiempofuncion2)) {
      funcion2();
      TiempoInicial2=millis();    // reset de inicio
   }
}
   void funcion1()
   {
    Serial.println("Dentro de la funcion 1");
   }
   void funcion2()
   {
    Serial.println("Dentro de la funcion 2");
   }
Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 743
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Para que entender el tema de millis creo que este artículo está muy bien, entre otras cosas porque ha comentado el código en castellano.
http://www.ardumania.es/ejercicio-2-blink-without-delay/

Salu2
Logged

Málaga
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Madre mía soy tontito. Ya lo he resuelto, muchas gracias a todos.
Logged

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

Muy bien... pero ¿y la solución? ¿Qué tenías mal? Explícalo porque tu caso puede pasarle a otro usuario y no dará con la solución si no lo expones.
Logged


Pages: [1]   Go Up
Jump to: