Print float su LCD in i2C

Avrei la necessità di stampare su un LCD 16x2 i2C il valore float che leggo dal convertitore ADS1115.
Il mio problema è trovare una libreria che lo faccia direttamente tramite un suo comando, nella riga e nella colonna che decido di utilizzare per visualizzare il risultato.
Ne ho provate alcune librerie (3) trovate su internet ma gli scarni esempi di cui sono corredate e i comandi non sempre espliciti, non mi hanno dato indicazioni esaurienti.
Saluti

LelloGi

Io in genere uso la LiquidCrystal I2C by Frank de Brabander che si trova nell'IDE.
Oppure su GitHub

Non vorrei sbagliare ma penso che gli serva qualcosa per incolonnare dei valori float correttamente. Il problema dell'incolonnamento (dato che è un float penso che gli si sposti continuamente) va risolto con istruzioni software, tipo snprintf.

maubarzi:
Io in genere uso la LiquidCrystal I2C by Frank de Brabander che si trova nell'IDE.
Oppure su GitHub

La stò usando anch'io ma non trovo un comando che mi visualizza il dato numerico, virgola compresa.
Ho guardato il file "keywords.txt" ma non ho trovato quello che cerco.
Quello che devo visualizzare sono valori numerici con anche 3 decimali dopo la virgola, tipo 0,123.
Saluti

LelloGi

Io a scanso una funzione similee la costruirei da solo. Crei una variabile intera. Le assegmi il valore della float, essendo intera troncherà i decimali. La printi su display. Printi una virgola. Poi fini a che il float é diverso da 0 {Moltoplichi per 10 il float. Assegni a l'intero il vakore del float. Sottrai al float l'intero. Printi l'intero}
Implementi questa come libreria dell'lcd, allo stesso modo delle altre e può tornare utile. Io farei così

Non capisco la domanda ...
... normalmente il metodo print() (o println() poco cambia), in tutte le librerie, estende quello definito nella classe "Stream" che è la stessa usata dalla classe "Serial" per cui, come per quest'ultima, il metodo "lcd.print(variable_float, numero_decimali);" (avendo chiamato l'istanza della classe con il nome lcd) dovrebbe fare la stessa cosa che fa la "Serial.print(variabile_float, numero_decimali);" ... ::slight_smile:

Guglielmo

Ho creato “float variabile = 0.123” e quando uso lcd.print mi stampa solo due decimali.
Lo sketch è questo:

/*************************************************
  ReadAnalogVoltage
  27 marzo 2019
  Arduino UNO e LCD i2C
  SDA A4 , SCL A5
**************************************************/
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27,16,2);

float variabile = 0.123;
void setup() {
  Serial.begin(57600);
  lcd.init();
  lcd.setBacklight(1);
  lcd.home(); 
  lcd.clear();
  }

void loop() {
  // read the input on analog pin 0:
  int sensorValue_0 = analogRead(A0);
  int sensorValue_1 = analogRead(A1);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage_0 = sensorValue_0 * (5.0 / 1023.0);
  float voltage_1 = sensorValue_1 * (5.0 / 1023.0);
  // print out the value you read:
  lcd.setCursor(0, 0);  // Set the cursor to col 0, row 0
  lcd.print(voltage_0);
  lcd.setCursor(8, 0);  // Set the cursor to col 8, row 0
  lcd.print(voltage_1);
  lcd.setCursor(0, 1);  // Set the cursor to col 0, row 1
  lcd.print("Ponte");
  lcd.setCursor(8, 1);  // Set the cursor to col 8, row 1
  //lcd.print("Ref");
  lcd.print(variabile);
  
  Serial.print(voltage_0);
  Serial.print("  "); 
  Serial.println(voltage_1);
  delay(1000); 
  }

Me ne servirebbero almeno tre decimali, visto che usando il ADS1115 si possono evidenziare.
Saluti

LelloGi

Quello che Guglielmo voleva dirti, è che puoi scrivere ad es:

Serial.println(1.23456, 4) gives "1.2346"
o nel tuo caso
lcd.print(1.23456, 4) gives "1.2346"

perchè tutte queste classi coinvolte, per la seriale, per l'lcd, ecc. ereditano, per la stampa, i metodi dalla classe Print, qui il reference se può interessare

Prova in questo modo, cioè passando come parametro anche il numero di decimali che vuoi stampare.

LelloGi:
Ho creato "float variabile = 0.123" e quando uso lcd.print mi stampa solo due decimali ....

Ma lo hai letto quello che ho scritto? La sintassi per il metodo print() te la sei andata a studiare?

Guglielmo

P.S.: ... sovrapposto con maubarzi :smiley: :smiley: :smiley:

Per un attimo ho pensato che stessi rispondendo a me e di aver scritto una emerita fesseria :money_mouth_face:

maubarzi:
Per un attimo ho pensato che stessi rispondendo a me e di aver scritto una emerita fesseria :money_mouth_face:

No, no, ci mancherebbe ... :smiley:

Ecco, ho aggiunto un "quote" così si capisce meglio :wink:

Guglielmo

gpb01:
Ma lo hai letto quello che ho scritto? La sintassi per il metodo print() te la sei andata a studiare?

Guglielmo

P.S.: ... sovrapposto con maubarzi :smiley: :smiley: :smiley:

Nella fretta di andare avanti con lo sviluppo del programma non ho letto tutto quello che fa l'istruzione print().
Leggendola ho visto che esiste l'istruzione: Serial.print(1.23456, 4) gives "1.2346".
Grazie!

LelloGi