Buenas!!! Ando teniendo un inconveniente con la función "dtostrf" para convertir de float a string.
El tema es que estoy desarrollando un termómetro de máxima y mínima y muestro los valores en un display oled, para lo cual, luego de obtener los valores de temperatura con sensores DS18B20, convierto los valores con dicha función para mostrarlos en pantalla. El problema es que, cuando llamo a esta función varias veces seguidas, hay varios valores que no se convierten, por lo que no me figuran en pantalla... Y NO SÉ POR QUÉ!!! ![]()
Ya probé poniendo delay entre ellas y tampoco funciona....
Les paso el programa y una captura del monitor serie donde se ve que no se generan.
Gracias!!!!
#include <Wire.h> //para manejar i2c
#include <OneWire.h> //Se importan las librerías para sensor ds18b20
#include <DallasTemperature.h>// librerìa para manejar sensor ds18b20
// Configuramos para comunicar con sensores
OneWire ourWire1(2); //Se establece el pin 2 como bus OneWire
OneWire ourWire2(5); //Se establece el pin 5 como bus OneWire
// Indicamos el pin asignado al sensor 1-Wire a DallasTemperature
DallasTemperature sensors1(&ourWire1); //Se declara una variable u objeto para nuestro sensor1
DallasTemperature sensors2(&ourWire2); //Se declara una variable u objeto para nuestro sensor2
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
#include <SPI.h> // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306Spi.h"
// Use the corresponding display class:
// Initialize the OLED display using SPI
// D5 -> CLK
// D7 -> MOSI (DOUT)
// D0 -> RES
// D2 -> DC
// D8 -> CS
SSD1306Spi display(D0, D2, D8);
float tin,ta,tmin,tmax;
char buffertin[4],bufferta[4],buffertmin[4],buffertmax[4];
void setup() {
//delay(1000);
display.init();
display.flipScreenVertically();
display.setContrast(255);
sensors1.begin(); //Se inicia el sensor 1
sensors2.begin(); //Se inicia el sensor 2
delay(500);
Serial.begin(115200);
delay(500);
sensors1.setResolution(10);
sensors2.setResolution(9);
sensors1.requestTemperatures(); //Prepara el sensor para la lectura
tin=sensors1.getTempCByIndex(0); // Almacenamos la temperatura del sensor de temperatura principal;
sensors2.requestTemperatures(); //Prepara el sensor para la lectura
ta=sensors2.getTempCByIndex(0); // Almacenamos la temperatura del sensor de temperatura ambiente
tmin=tin;
tmax=tin;
dtostrf(tmin,4,1,buffertmin); // Convierto un numero float a una cadena de texto
dtostrf(tmax,4,1,buffertmax); // Convierto un numero float a una cadena de texto
dtostrf(tin,4,1,buffertin); // Convierto un numero float a una cadena de texto
dtostrf(ta,4,1,bufferta); // Convierto un numero float a una cadena de texto
delay(1000);
Serial.println(buffertin);
Serial.println(bufferta);
Serial.println(buffertmin);
Serial.println(buffertmax);
}
void loop()
{
display.resetDisplay();
display.drawRect(0,0,128,64); //Recuadro de pantalla
display.drawLine(71,16,128,16); //Base de Ta
display.drawLine(71,33,128,33); //Base de Tmin
display.drawLine(0,49,128,49); //Techo de hora y fecha
display.drawLine(71,0,71,49); //vertical
display.display();
display.setFont(Arimo_12); //font de título, Tmin, Tmax, fecha y hora
display.drawString(73, 2, "Ta:"); //Temp. ambiente
display.drawString(90, 2, bufferta); //
display.drawString(73, 18, "Tm:"); //Tmin
display.drawString(95, 18, buffertmin); //
display.drawString(73, 35, "TM:"); //Tmax
display.drawString(95, 35, buffertmax); //
display.drawString(3, 50, "DD/MM/AAAA hh:mm");
display.display();
display.setFont(ArialMT_Plain_16); //font de Tin
display.drawString(3, 2, "Tin: [°C]");
display.setFont(Century_Schoolbook_L_Roman_30); //font de temperatura principal
display.drawString(3, 15, buffertin);
display.display();
sensors1.requestTemperatures(); //Prepara los sensores para la lectura
tin=sensors1.getTempCByIndex(0); // Almacenamos la temperatura del sensor de temperatura principal;
sensors2.requestTemperatures(); //Prepara el sensor para la lectura
ta=sensors2.getTempCByIndex(0); // Almacenamos la temperatura del sensor de temperatura ambiente
dtostrf(tin,4,1,buffertin); // Convierto un numero float a una cadena de texto
dtostrf(ta,4,1,bufferta); // Convierto un numero float a una cadena de texto
if(tin>tmax)
{
tmax=tin;
dtostrf(tmax,4,1,buffertmax);
}
if(tin<tmin)
{
tmin=tin;
dtostrf(tmin,4,1,buffertmin);
}
Serial.print("Temp. principal: "); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.print(tin); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.println(" grados Centigrados");
Serial.print("Valor min.: "); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.print(tmin); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.println(" grados Centigrados");
Serial.print("Valor max.: "); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.print(tmax); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.println(" grados Centigrados");
Serial.print("Temp. ambiente: "); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.print(ta); //Se lee e imprime la temperatura en grados Celsius del sensor ds18b20
Serial.println(" grados Centigrados");
Serial.println(buffertin);
Serial.println(bufferta);
Serial.println(buffertmin);
Serial.println(buffertmax);
delay(1000);
}
