Autor Tema: Problema con resultado de operacion con variable float  (Leído 4243 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Problema con resultado de operacion con variable float
« 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.

Todos los días se aprende algo nuevo.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Problema con resultado de operacion con variable float
« Respuesta #1 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

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Problema con resultado de operacion con variable float
« Respuesta #2 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");   
Todos los días se aprende algo nuevo.

Desconectado lmtreser

  • PIC16
  • ***
  • Mensajes: 133
    • Automatismos Mar del Plata
Re:Problema con resultado de operacion con variable float
« Respuesta #3 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.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Problema con resultado de operacion con variable float
« Respuesta #4 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.
« Última modificación: 06 de Noviembre de 2024, 12:21:03 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado lmtreser

  • PIC16
  • ***
  • Mensajes: 133
    • Automatismos Mar del Plata
Re:Problema con resultado de operacion con variable float
« Respuesta #5 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.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Problema con resultado de operacion con variable float
« Respuesta #6 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.
Todos los días se aprende algo nuevo.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Problema con resultado de operacion con variable float
« Respuesta #7 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
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Problema con resultado de operacion con variable float
« Respuesta #8 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.
Todos los días se aprende algo nuevo.