d-duino y oled, no consigo pasar parámetros

Buenos días, ha caído en mis manos una d-duino, viene a ser un ESP8266 mas una pantallita OLED. Estoy intentando trastear con ella un poco, en vías de nuevos proyectos y me he encallado. Le quiero programar una función para poner texto en la pantalla Si le pongo el texto como tal bien; pero si le paso el texto como parámetros me salta el error:

no matching function for call to 'SSD1306Wire::drawString(int, int, float&)'

Entiendo que el problema está en que el parámetro que le paso como dato no tiene el formato adecuado, no? He estado buscando especificaciones de la función display.drawString y ejemplos muchos, pero la mayoria con textos estáticos y no lo he resuelto… alguna idea?

Os paso el código total:

#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
#include <LiquidCrystal_I2C.h>
#include "SSD1306.h"

SSD1306  display(0x3c, D1, D2);
DHT dht(DHTPIN, DHTTYPE);
// WiFi network info.
char ssid[] = "aaaaaa";
char wifiPassword[] = "aaaaaaaa";
// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "aaaaaaa";
char password[] = "aaaaaa";
char clientID[] = "aaaaaaa";
unsigned long lastMillis = 0;
int temps_refresc = 10000;

void setup() {
  Serial.begin(115200);
  dht.begin();
  display.init();
  Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}

void loop() {
Serial.println("loop");
Cayenne.loop();
//Publish data every 10 seconds (10000 milliseconds). Change this value to publish at a different interval.
  if (millis() - lastMillis > temps_refresc) {
    float hum = dht.readHumidity();
    float temp = dht.readTemperature();
  
    lastMillis = millis();
  
    Cayenne.celsiusWrite(0, temp);
    Cayenne.virtualWrite(1, hum, "humedad relativa", "%");
  
    pinta_pantalla(temp, hum);
  
    Serial.print("temperatura: ");
    Serial.println(temp);
    Serial.print("humadad: ");
    Serial.println(hum);
    Serial.println("-------------------------------------------------------------");
  }
}

void pinta_pantalla(float temp, float hum){
    display.clear(); 
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_10);
    display.drawString(0, 0, "IP:");
    display.drawString(15, 0, WiFi.localIP().toString());
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_10);
    display.drawString(0, 11, "SSID:");
    display.drawString(30, 11, ssid);
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_24);
    display.drawString(0, 22, temp);
    display.drawString(50, 22, "|");
    display.drawString(60, 22, hum);
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_10);
    display.drawString(0, 48, "abcdefghijklmnopqrst");
    display.display();
 return;
}

//Default function for processing actuator commands from the Cayenne Dashboard.
//You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
CAYENNE_IN_DEFAULT()
{
  CAYENNE_LOG("CAYENNE_IN_DEFAULT(%u) - %s, %s", request.channel, getValue.getId(), getValue.asString());
  //Process message here. If there is an error set an error message using getValue.setError(), e.g getValue.setError("Error message");
}

Gracias y un saludo !!

La respuesta a tu problema es observar la librería SSD1306 y que parámetros espera la función citada.

Obviamente no acepta la referencia float que estas enviando en algún momento.

Defines como float a hum y temp

    display.drawString(0, 22, temp);
    display.drawString(50, 22, "|");
    display.drawString(60, 22, hum);

Asi que estas dos lineas son tus errores. Usa dtostrf() para pasar de float a string

char* dtostrf(float number, int tamanyo, int decimales, char* buffer);
/*                    |         |             |               \_ buffer donde almacenaremos la cadena
|         |             \_ Precisión (nº decimales)
|         \_Tamaño del número en carácteres
\_ Número a convertir
*/

Ejemplo

float i=0;
void setup() {
   // put your setup code here, to run once:
   Serial.begin(9600);  //Iniciamos la salida serie
   Serial.println("Iniciando ejemplo");
}
void loop() {
  char* buffn="";  //Cadena donde almacenaremos el número convertido
  dtostrf(i,10,2,buffn); //Llamada a la función
  char buffer[80]=" "; //Buffer de la cadena donde se devuelve todo, número formateado y cadena 
  concatenada
  char* formato="Bucle %s"; //Cadena con la mascara a convertir
  sprintf(buffer, formato, buffn);
  i+=1.01;
  Serial.println(buffer);
  delay(1000);
}

Gracias por tu ayuda, una vez mas. :slight_smile: Tu solución me ha funcionado.

Un saludo !