TODOPIC

Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: Fer_TACA en 05 de Noviembre de 2024, 16:43:02

Título: Problema con resultado de operacion con variable float
Publicado por: Fer_TACA en 05 de Noviembre de 2024, 16:43:02
Hola a todos,
Estoy empezando a incursionar en este mundo de Arduino y me he encontrado con lo que puede ser un problema y no encuentro porque es. Lo cuento:

Tengo una variable declarada como float y en ella quiero almacenar el valor de una operación para luego mostrar el valor en un LCD.
El caso es que siempre, independientemente del numero de decimales que ponga, el resultado siempre me sale con los decimales con el(os) valor(es) =0.
Adjunto la parte del código implicado para ver si me pueden indicar donde radica el fallo:

Código: [Seleccionar]
//Varaiables globales
float numeroGrados = 0;         // Variable para guardar el numero de grados a los que se produjo el desequilibrio.
long tiempoEntrePulsos = 0;     // Tiempo guardado entre un pulso y otro.
long tiempoOscilacion = 0;      // Tiempo entre un pulso y otro.
long tiempoDesequilibrio = 0;   // Tiempo para saber en que punto se produjo el desequilibrio.

.........................................................................................

// Dentro del loop el siguiente código que realiza el calculo para mostrar en el LCD el valor del numero de grados:

tiempoEntrePulsos = (micros() - tiempoOscilacion);  // Se guarda el tiempo entre pulsos.
tiempoOscilacion = micros();                                  // Se guarda el tiempo para calcular el tiempo de un nuevo pulso.
banderaContarPulsos = false;                                 // Se resetea el flag de la interrupción de contar pulsos.

Gracias de antemano

F.

Título: Re:Problema con resultado de operacion con variable float
Publicado por: Eduardo2 en 05 de Noviembre de 2024, 17:22:13
El problema que yo tuve era usando sprintf con variables float. La solución era agregando con un switch de compilación:

compiler.c.elf.extra_flags=-Wl,-u,vfprintf -lprintf_flt -lm
Título: Re:Problema con resultado de operacion con variable float
Publicado por: Fer_TACA en 06 de Noviembre de 2024, 06:49:51
Gracias por la respuesta Eduardo.
El caso es que revisando mi post, he observado que la parte del código donde quiero obtener el valor de la variable flot no era el correcto.
Seguidamente pongo el código correcto:

Código: [Seleccionar]
tiempoDesequilibrio = (micros() - tiempoOscilacion);  // Se guarda el tiempo entre pulsos.
    tiempoOscilacion = micros();
    numeroGrados = (tiempoDesequilibrio * 360) / tiempoEntrePulsos;  // El tiempo de desequilibrio se pasa a grados.
    lcd.setCursor(9, 2);                                             // Posicion del cursor.
    lcd.print(tiempoDesequilibrio);                                  //Se imprime el tiempo del disparo de desequilibrio.
    lcd.print("usg");   
Título: Re:Problema con resultado de operacion con variable float
Publicado por: lmtreser en 06 de Noviembre de 2024, 09:37:09
Hola Fermín, en lcd.print(tiempoDesequilibrio) estás mostrando un long, que es una variable entera de 32 bits.
Saludos.
Título: Re:Problema con resultado de operacion con variable float
Publicado por: Fer_TACA en 06 de Noviembre de 2024, 12:12:50
Hola Fermín, en lcd.print(tiempoDesequilibrio) estás mostrando un long, que es una variable entera de 32 bits.
Saludos.
Gracias Lucas por la repuesta.
Me volví a equivocar al poner el código aquí en el foro. En el scketch está bien.
Quise decir

lcd.print(numeroRPM,2);

Pero el resultado es igual co valor 0 en los decimales.
Título: Re:Problema con resultado de operacion con variable float
Publicado por: lmtreser en 06 de Noviembre de 2024, 13:10:53
Tendrías que subir el código fuente o más detalles para ver que está pasado. Otra cosa, podes habilitar el monitor serie para ver el contenido de las variables. Saludos.
Título: Re:Problema con resultado de operacion con variable float
Publicado por: Fer_TACA en 06 de Noviembre de 2024, 15:44:34
¡¡¡ Ya esta solucionado !!!!

¡ Y que simple es !!

Basta con poner en el multiplicando el valor con decimales, es decir:
numeroGrados = (tiempoDesequilibrio * 360.0) / tiempoEntrePulsos;  // El tiempo de desequilibrio se pasa a grados.

F.
Título: Re:Problema con resultado de operacion con variable float
Publicado por: DominusDRR en 09 de Noviembre de 2024, 11:29:00
¡¡¡ Ya esta solucionado !!!!

¡ Y que simple es !!

Basta con poner en el multiplicando el valor con decimales, es decir:
numeroGrados = (tiempoDesequilibrio * 360.0) / tiempoEntrePulsos;  // El tiempo de desequilibrio se pasa a grados.

F.

No funciona esto:

Código: C
  1. (tiempoDesequilibrio * (float)(360))

Me parece que en C, es de esa manera, y creo que la plataforma Arduino cumple (o trata) de cumplir con la norma del lenguaje C
Título: Re:Problema con resultado de operacion con variable float
Publicado por: Fer_TACA en 09 de Noviembre de 2024, 11:47:17
Pues no probado con eso, pero lo que es cierto es que como lo he descrito en mi último post funciona a la perfección.

F.