Topic: Missing character in temp display if >199F
Hi Everyone,
I am working on an engine temperature monitor using ESP8266-12E node mcu, three DS18B20 sensors on a One Wire interface, and RemoteXY to my iphone.
When any temp sensor goes over 199 degrees F the last character is occasionally missing... for example the display reads 199 then exactly at 200 the display reads "20" not "200". At 201F then it reads "201" and so on with an occasional lost last character.
I have confirmed via serial monitor that the esp8266 is in fact reading the correct temperature. Is it possible that the dtostrf is losing the last digit when converting to a string?
The behavior is the same whether I build this gadget with an ESP/wifi or Arduino Nano and a dsd-tech ble transceiver or only one temp sensor or three.
Thanks for your help!
/*
-- Corey Mugaas 2021
uses esp8266 nodemcu wifi, temp sensor DS18B20, & displays temp on RemoteXY iOS app
*/
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#include<OneWire.h>
#include<DallasTemperature.h>
#include <RemoteXY.h>
// RemoteXY connection settings
#define REMOTEXY_WIFI_SSID "Engine Monitor"
#define REMOTEXY_WIFI_PASSWORD ""
#define REMOTEXY_SERVER_PORT 6377
// RemoteXY configuration, olive green background
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,0,0,7,0,31,0,13,103,0,
67,5,19,28,59,33,85,103,7,129,
0,30,20,36,6,85,84,101,109,112,
101,114,97,116,117,114,101,0 };
// this structure defines all the variables and events of your control interface
struct {
// output variables
char temp_1[7]; // string UTF8 end zero
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
//
//
// Setup a oneWire instance to communicate with any oneWire devices on pin 7
#define ONE_WIRE_BUS D2
// Pass oneWire reference to Dallas Temperature
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Assign sensor name to individual sensor address
DeviceAddress Temp_1 = { 0x28, 0xFF, 0xD2, 0xFB, 0xAE, 0x20, 0x04, 0xD2 };
void setup()
{
RemoteXY_Init ();
// TODO you setup code
// start sensors
sensors.begin();
Serial.begin(115200);
// set sensor resolution to 10 bit
sensors.setResolution(Temp_1, 9);
}
void loop()
{
RemoteXY_Handler ();
// TODO you loop code
// use the RemoteXY structure for data transfer
// do not call delay()
// request temp data from temp senders
sensors.requestTemperatures();
float TempRawData = sensors.getTempF(Temp_1);
Serial.println(TempRawData);
Serial.println();
Serial.println();
// prep data for RemoteXY
// convert the temperature value into a string
// and place it immediately in the field text_1 patterns RemoteXY
dtostrf(TempRawData, 0, 0, RemoteXY.temp_1);
}