Sprintf creating bad formatting for data

Following advise from @peekay123 I used sprintf to bring order to my output.

However, now the data is coming out in a weird format?


      //Particle.publish("environment/temperature", String(bmp.readTemperature()));
      //Particle.publish("environment/temperature", String(temp);
      //Particle.publish("environment/pressure", String(pToHg(bmp.readPressure())));
      //Particle.publish("environment/altitude", String(bmp.readAltitude(seaLevelhPa)));
      sprintf(publishString,"{\"Temp\": %u, \"Press\": %u, \"Alt\": %u}",(bmp.readTemperature()),(pToHg(bmp.readPressure())),(bmp.readAltitude(seaLevelhPa)));


{\"Temp\": 1610612736, \"Press\": 1077454438, \"Alt\": 1610612736}

Temperature is 1610612736??

Have you tried options other than %u?

What kind of numbers are those? Integers, doubles, long, etc?

Also, some of those parentheses can be eliminated I think.

sprintf(publishString, "{\"Temp\": %u, \"Press\": %u, \"Alt\": %u}", bmp.readTemperature(), pToHg(bmp.readPressure()), bmp.readAltitude(seaLevelhPa));
1 Like

if your BMP bmp.readTemperature() function actually returns a floating point number (float or double) it will be misinterpreted (as you observed).

In your case you are interpreting them as unsigned integers (the u format specifier).

You can cast the returns from your function, but unless the temperatures are in Kelvin, you may want to accommodate a signed number.

1 Like

@r0b0tn1k, I think you want:

sprintf(publishString,"{\"Temp\": %f, \"Press\": %f, \"Alt\": %f}", bmp.readTemperature(), pToHg(bmp.readPressure(), bmp.readAltitude(seaLevelhPa);

If you want more/less zeroes, you could use: %.1f, %.2f, etc.

1 Like

I think you misplaced a parenthesis or two.

1 Like

you are correct!

sprintf(publishString,"{\"Temp\": %f, \"Press\": %f, \"Alt\": %f}", bmp.readTemperature(), pToHg(bmp.readPressure()), bmp.readAltitude(seaLevelhPa));

that should do it.

1 Like