desktop

Usar en Arduino sprintf para variables float

Saludos A todos en el Foro, lei por ahi que en arduino no se pueden formatear cadenas con sprintf a partir de variables float, sin embargo utilice el codigo que dejo enseguida, y veo que si funciona correctamente.

¿Alguien que tenga experiencia en el tema? o ¿Es que eso era en las primeras versiones del IDE Arduino y ya lo corrigieron?

Mucho agradecere sus comentarios.

C++:
/*leer temperatura y humedad de senesores DHT11 y DS18B20
 * usando el mismo Pin de entrada (pin4)
 *
 *
 */
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
#define DHTTYPE DHT11   // DHT 11
DHT dht(ONE_WIRE_BUS, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
 
Serial.begin(115200);
    dht.begin();
 sensors.begin();
 
}

void loop() {
 
float HE=dht.readHumidity();
float TE=dht.readTemperature();
Serial.print("Humedad:");Serial.print(HE);
Serial.print(" TempE:");Serial.print(TE);

sensors.requestTemperatures(); // Solicitamos obtener  temperatura de DS18B20
float TI=sensors.getTempCByIndex(0);
Serial.print(" TempI:=");Serial.println(TI);


char str[50];
  sprintf(str, "Humedad:%f TempE:%f TempI:%f", HE, TE, TI);
  Serial.println(str);

Serial.println("=============================");
delay(2000);
}

Esta es la salida que me da el Monitor serial:

Código:
=============================
Humedad:34.00 TempE:23.00 TempI:=22.94
Humedad:34.000000 TempE:23.000000 TempI:22.937500
=============================

Como veran, salvo los "ceros" que por ahora estan de mas, veo que la funcion sprintf hace lo que debe.
 
Se supone que Arduino usa wiring, pero en realidad usa wiring encima de una capa de C++ lo que implica que todas o casi todas las cosa de c++ se pueden usar, como por ejemplo #define que no existe en Wiring y si en C.
Se ha comentado varias veces en el foro.
 
Se supone que Arduino usa wiring, pero en realidad usa wiring encima de una capa de C++ lo que implica que todas o casi todas las cosa de c++ se pueden usar, como por ejemplo #define que no existe en Wiring y si en C.
Se ha comentado varias veces en el foro.
Gracias, me pase visitando algunos sitios incluso el propio foro de arduino y todo indica que en los albores de su desarrollo si se presento el problema que comento y lo resolvian convirtiendo los valores a enteros, etc, pero definitivamente en alguna version quedo resuelto asi que no hay mas delito que perseguir, si los moderadores lo consideran, puede pasar a mejor vida el Tema.

Saludos
 
Atrás
Arriba