Hola comunidad, tengo un código de Medición de temperatura, la cosa es que quiero pasar el resultado final que me muestre solo el numero entero, hay algún código o librería para hacerlo?
tengo un arduino uno
//libreria TV
#include <TVout.h>
#include <video_gen.h>
#include <font4x6.h>
#include <font6x8.h>
#include <font8x8.h>
#include <font8x8ext.h>
#include <fontALL.h>
//Cargo la librería math.h y defino B y R0 (necesarios para leer la temperatura)
#include <math.h>
const int B = 1000; // B valor del termistor
const int R0 = 5000; // R0 = 100k el mio es de 5k
const int pinTemp = A0; // Grove - Sensor de temperature conectado a A0
float temp, temp_med = 0; // Temperatura en ºC
float acum = 0, Vout; // variables secundarias
float res = 0.010; // en V/ºC
int i, num_muestras = 100;
TVout TV; //tv set up
void setup()
{
//comienzo tv
Serial.begin(9600); // señal serial
pinMode(pinTemp, INPUT); //entrada pin analogica sensor
TV.begin(PAL,120,96); //tipo de tv
TV.select_font(font8x8); //seleccionar fuente y tamaño
TV.print(9,44,"Service Naval"); // comando printin pone lo escrito arriba sin modificar
TV.delay(2500); //tiempo en pantalla
TV.clear_screen(); //borra estado actual de la pantalla
}
void loop()
{
//incio del calculo de la temperatura
acum = 0;
temp_med = 0;
//Calculamos primero para el Lm35C
for (i = 0; i < num_muestras; i++) {
Vout = analogRead(pinTemp) * 0.00488758553275; // step * V/step = V
temp = Vout / res; // V/(V/ºC) = ºC
acum += temp;
temp_med = acum / num_muestras;
delay(10); // Al tener 10 milisegundos y tener 100 muestras tardara 1 segundo en hacer el bucle.
}
//Serial.print(temp_med);
//Serial.println(" ºC"); //Fin del calculo de la tempertura
char buffer[10]=" ";
char* formato="Bucle %3,2f";
sprintf(buffer, formato, temp_med);
temp_med++;
Serial.println(buffer);
delay(1000);
TV.println(9,44,buffer); //muestra de C° en tv
}
intente hacer uno con el serial printf pero no lo entendí bien y no me da resultado
temp_med teóricamente es el resultado final de la ecuación a la cual hay que cambiar a entero.
Encontre un codigo de como hacerlo, pero no llego a entenderlo, si alguien me ayuda:
int i;
float f;
f = 3.6;
i = (int) f; // ahora i es 3
pero nose como interpretarlo en mi proyecto para que me de entero el numero
Lo pude resolver solo ahora les paso el código y como lo pensé:
//libreria TV
#include <TVout.h>
#include <video_gen.h>
#include <font4x6.h>
#include <font6x8.h>
#include <font8x8.h>
#include <font8x8ext.h>
#include <fontALL.h>
//Cargo la librería math.h y defino B y R0 (necesarios para leer la temperatura)
#include <math.h>
const int B = 1000; // B valor del termistor
const int R0 = 5000; // R0 = 100k el mio es de 5k
const int pinTemp = A0; // Grove - Sensor de temperature conectado a A0
float temp, temp_med = 0; // Temperatura en ºC
float acum = 0, Vout; // variables secundarias
float res = 0.010; // en V/ºC
int i, num_muestras = 100;
int o;
float t;
TVout TV; //tv set up
void setup()
{
//comienzo tv
Serial.begin(9600); // señal serial
pinMode(pinTemp, INPUT); //entrada pin analogica sensor
TV.begin(PAL,120,96); //tipo de tv
TV.select_font(font8x8); //seleccionar fuente y tamaño
TV.print(9,44,"Service Naval"); // comando printin pone lo escrito arriba sin modificar
TV.delay(2500); //tiempo en pantalla
TV.clear_screen(); //borra estado actual de la pantalla
}
void loop()
{
//incio del calculo de la temperatura
acum = 0;
temp_med = 0;
//Calculamos primero para el Lm35C
for (i = 0; i < num_muestras; i++) {
Vout = analogRead(pinTemp) * 0.00488758553275; // step * V/step = V
temp = Vout / res; // V/(V/ºC) = ºC
acum += temp;
temp_med = acum / num_muestras;
delay(10); // Al tener 10 milisegundos y tener 100 muestras tardara 1 segundo en hacer el bucle.
}
Serial.print(o);
Serial.println(" ºC"); //Fin del calculo de la tempertura
t = temp_med;
o = (int) t; // ahora i es 3
TV.println(9,44,o); //muestra de C° en tv
}
Bien int o puede ser llamado como quieran mientras no se repita en las variables.
como ven mi comando temp_med es mi total que da con decimal entonces si t = temp_med (t es la variable float que asigne arriba) y o = int, con el calculo "o = (int) t;" me tira directamente el numero entero.
Soy nuevo en la programación y solo se necesita leer un poco pero espero que este post pueda ayudar a mas de uno que este como yo.
¿Buscas hacer redondeo normal, en función techo o función piso?
El método que utilizas para descartar cifras decimales, equivale al redondeo en función piso.
Ya lo resolví justamente como dijiste, con redondeo en función piso. Nada mas pasarlo a numero entero, no importaba que no me redondee un numero mas por las decimales.