Go Down

Topic: Problema con dtostrf [Solucionado] (Read 274 times) previous topic - next topic

Sereno

Jun 09, 2019, 07:10 pm Last Edit: Jun 09, 2019, 09:07 pm by Sereno
Hola, tengo un problema con dtostrf.
Necesito pasar un valor de temperatura que está dentro de float temp a una cadena de caracteres para enviarlos a una base de datos.
El problema que tengo es que una vez ejecutado dtostrf dentro de buftemp tengo dos veces el valor de la temperatura.
esto es lo que recibo por el serial a enviar buftemp:  26.0 26.0, y necesito que solo esté una sola vez.
Alguien sabe donde me estoy equivocando??

Code: [Select]

#include "DHTesp.h"

DHTesp dht;

float temp = 0;
float hum = 0;

void setup() {

  dht.setup(13, DHTesp::DHT22);
  Serial.begin(115200);
}


void loop() {

  temp = dht.getTemperature();
  hum = dht.getHumidity();

  delay(2000);

  char* buftemp = ""; //Cadena donde almacenaremos el número convertido
  dtostrf(temp, 5, 2, buftemp); //Llamada a la función

  Serial.println("Recording data.");
  Serial.println(buftemp);
}

IgnoranteAbsoluto

Prueba a cambiar la línea:
Code: [Select]
char* buftemp = ""; //Cadena donde almacenaremos el número convertido

Por la línea:
Code: [Select]
char buftemp[15]; //Cadena donde almacenaremos el número convertido

Esto te permite almacenar una cadena de hasta 14 caracteres de largo (hay que reservar uno más pare que indique el final de la cadena).

Tal como lo has definido lo que reserva es espacio para una cadena de tamaño cero.

Sereno


surbyte

Aprovecha todo mejor de este modo, usando un buffer mas grande que albergue toda la presentación

Code: [Select]
void loop() {

  temp = dht.getTemperature();
  hum = dht.getHumidity();

  delay(2000);

  char buftemp[10]; //Cadena donde almacenaremos el número convertido
  char buffer[25];
  dtostrf(temp, 5, 2, buftemp); //Llamada a la función

  sprintf(buffer, "Recording data: %s", buftemp); // %s es para cadenas, tmb puedes usar enteros, hexas, chars
  Serial.println(buffer);
}

Sereno

Gracias @surbyte, esa parte ya la tenía.
Aprovecho para darte las gracias por la ayuda y la gran cantidad de problemas que soluciono gracias a este foro, aunque no pregunte siempre encuentro soluciones por aquí. ;)

Go Up