Problema en exactitud de conversión milisegundos a segundos

Buenos días gente! Espero estén bien. :grinning_face_with_smiling_eyes:
Tengo un pequeño pero gran problema
El tema es el siguiente:
La idea es medir el tiempo que tarda la ejecución de un bloque de código a través de la función millis, luego convertirlo a través de una división en segundos (aunque en realidad necesito el tiempo en minutos, pero ya en segundos está el problema).

Explicación del programa:

En la primera línea guardo el tiempo con millis, sucede el bloque, y al final guardo el tiempo de nuevo con un millis 2. Luego realizo la resta entre estos, para obtener el tiempo que tomó la ejecución de dicho código. Hasta acá todo bien.
Para la conversión a segundos necesito dividirlo por 1000, corroborando con el monitorSerie, la diferencia de tiempo en milisegundos corresponde con el bloque, pero en la conversión surge el problema, y es que los números después de la coma se quedan en cero, solo es correcto el número entero.

Probé con diferentes tipos de variables. También probé en solo dividirlo por 10 y no por 1000, pero tampoco. La verdad no sé que hacer, no es un código complejo, pero el problema está. Estoy usando un Arduino UNO genérico.

Agradecería cualquier opinión, estoy trabajando en un proyecto y no pensé atascarme en este punto, busqué bastante pero no encontré la solución. :confused:
Dejo el sketch adaptado con contenido general, para no poner el código específico que estoy usando y hacerlo más simple.

Desde ya muchas gracias, Saludos!!

unsigned long tiempo1 = 0;
unsigned long tiempo2 = 0;
unsigned long deltaTiempo = 0;
int led=13;
float tiempoS=0;

void setup (){
pinMode (led, OUTPUT);
Serial.begin(9600);
}

void loop() {
tiempo1=millis();
// Bloque de código a medir 
digitalWrite (led, HIGH); 
delay (100);
digitalWrite (led, LOW); 
delay (100);
digitalWrite (led, HIGH); 
delay (100);
digitalWrite (led, LOW); 
delay (100);
// Fin de bloque a medir 
tiempo2=millis();
deltaTiempo=tiempo2-tiempo1;
Serial.print ("Dif. de tiempo(ms):");
Serial.println(deltaTiempo);
tiempoS = ((float) deltaTiempo / 1000);
Serial.print ("Tiempo en Segundos:");
Serial.println(tiempoS, 4); 
}

Hola
en esta línea: tiempoS = (deltaTiempo / 1000); // conversión de miliseg a segundos

hazlo así: tiempoS = ((float) deltaTiempo / 1000); // conversión de miliseg a segundos
RV mineirin

Moderador:
Por favor, lee las Normas del foro y edita tu post inicial agregando el código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Como no veo el código no respondo.
@ruilviana se tomó el trabajo de descargarlo, pero no todos lo hacemos, porque estas obligado a postearlo debidamente como lo dicen las normas.

De lo que veo hasta ahora las cuentas que se visualizan son correctas en el campo de los enteros largos o unsigned long.
Si divides 1324/1000 en enteros la respuesta es 1 y será 1.000 por lo visto si usas float para que te presente decimales.
Ahora veo que ha hecho @ruilviana y entiendo que tienes algun problema de conversión de tipos de variables.

Disculpas, corregido!

A la perfección :+1: :+1: muchas gracias! La verdad no lo sabía. Saludos cordiales :mechanical_arm:

Para la próxima, si preguntas por un problema no pongas la solución en tu primer post, coloca exactamente el que estaba mal o sea sin la solución de @ruilviana para que el hilo tenga sentido.
Ahora parece que preguntaras por algo que ya estaba bien.
Tenlo presente para la siguiente duda.
SUerte.

Otra forma de hacerlo

tiempoS = deltaTiempo / 1000.0;

Saludos

1 Like