Go Down

Topic: [Solucionado] Problemilla usando millis() (Read 2234 times) previous topic - next topic

Feb 15, 2012, 08:42 pm Last Edit: Feb 16, 2012, 01:32 pm by Rido Reason: 1
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.

MrGastoso

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
http://mrgastoso.blogspot.com/

Pofenas

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

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.

Cheyenne

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.
http://cuadricopterodiyarduino.blogspot.com/

SrDonGato

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: [Select]
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");
   }

ionhs

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

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

Cheyenne

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.
http://cuadricopterodiyarduino.blogspot.com/

Go Up