Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

20/11/2013 #1


Función millis() me retorna números gigantes
Muy estimados!
Cómo están?

Bueno, tengo aquí algo que no sé por qué actúa como actúa... vean el código.
Esto es en el Arduino UNO.

Código:
#define DistanciaSensores 1

unsigned long Tiempo1,Tiempo2,Tiempo;
float Velocidad;

Tiempo1=millis();
// Aquí hay más código que demora un tiempo en ejecutarse
Tiempo2=millis();

  Tiempo=(Tiempo2-Tiempo1);
  Velocidad=(DistanciaSensores/(Tiempo/1000))*3.6;         // V=d/t en [km/h]
  Serial.print("Velocidad: ");
  Serial.print(Velocidad);
  Serial.println(" [km/h]");
  Serial.print(Tiempo);
Lo que sale, son cosas que no entiendo:
La "velocidad" que aparece en el monitor serial siempre es 0.
El "Tiempo" que aparece en el monitor serial siempre es un número muy grande. Cuando han pasado como 3 segundos, el "Tiempo" que aparece es como 32568 (cualquier cosa en ese orden). Según tutorial de Arduino, eso serían como 32 segundos.

Es decir, a simple vista, la función millis() tira números tan grandes, que hace que la velocidad sea prácticamente cero. Pero... no ha pasado nunca tanto tiempo!

El código que está entremedio, solamente lee dos botones diferentes que yo mismo presiono, e insisto, típicamente dejo pasar 3 segundos aprox, y no tantos como me indica la millis().

Estaré usando mal la función millis() ?
Según la página de Arduino, no...

Alguien sabe lo que pasa aquí?
Muchas gracias!
20/11/2013 #2

Avatar de Gudino Roberto duberlin

Hola Amigo, bueno has declarado las variables tiempo como tipo long, es de esperarse que obtengas valores con longitud de hasta 16bits.
20/11/2013 #3


Si, pero en la página de Arduino dice que para guardar valores de millis(), se necesitan declarar variables "unsigned long"... aún así, esto solamente significaría, que estoy trabajando con números pesados (en términos de cantidad de memoria utilizada, o sea, de 32bit), pero eso no significa que los valores que contienen sean necesariamente grandes desde el inicio...

y a la variable "Velocidad" no sé si debo declararla como float o long. Cuando hago esto, sigue siendo cero, pero sin dígitos detrás de la coma, lo cual me parece aún más extraño...

Gracias en todo caso!
20/11/2013 #4

Avatar de Gudino Roberto duberlin

Bueno, seria conveniente que todas las variables que intervienen en una ecuacion tengan el mismo formato.
Ahora bien, tendras que hacer un seguimiento de los valores que toman las variables "distanciasensores" y "tiempo".
20/11/2013 #5


Bueno, dejé todas las variables como "unsigned long", lo cual a mi parecer está bien, porque nunca trabajo con signos negativos. Pero lo hice para dejar todas las variables en el mismo formato.

Ahora entonces, hice esto, para rutear los valores de las variables.

Código:
  Serial.println(Tiempo);
  Serial.println(Tiempo1);
  Serial.println(Tiempo2);
  Serial.println(DistanciaSensores);
y sale:

Código:
462
1980
2442
1
lo cual es completamente mentira (excepto el valor "DistanciaSensores" y "Tiempo").
Y es mentira, puesto que entre "Tiempo1" y "Tiempo2" generé mucho menos de 1 segundo, y no más de 1,5 como sale allí.

No sé qué pasa... no pensé que iba a perder tanto tiempo con algo tan simple...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.