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É!!!  :smiley-confuse:
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.


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Inconveniente con dtostrf


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts