Inconveniente con dtostrf
buenas!!! ando teniendo un inconveniente con la función "dtostrf" para convertir de float 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 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!!!!
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 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!!!!
code: [select]
#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 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 `#include "ssd1306wire.h"`
#include <spi.h> // needed arduino 1.6.5 , earlier
#include "ssd1306spi.h"
// use corresponding display class:
// initialize 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 una cadena de texto
dtostrf(tmax,4,1,buffertmax); // convierto un numero float una cadena de texto
dtostrf(tin,4,1,buffertin); // convierto un numero float una cadena de texto
dtostrf(ta,4,1,bufferta); // convierto un numero float 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 una cadena de texto
dtostrf(ta,4,1,bufferta); // convierto un numero float 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);
}
probaste aumentando en 1 o 2 el tamaño de cada buffer?
yo normalmente y no es muy profesional lo que diré, no me quedo corto y uso buffers de 8 caracteres casi siempre.
si tengo limitaciones de memoria entonces hago bien las cosas.
yo normalmente y no es muy profesional lo que diré, no me quedo corto y uso buffers de 8 caracteres casi siempre.
si tengo limitaciones de memoria entonces hago bien las cosas.
Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Inconveniente con dtostrf
arduino
Comments
Post a Comment