Simboli anomali su display LCD 16x2

Buongiorno a tutti sono nuovo sul forum e, come tanti, sono appassionato di Arduino.
Ho un problema nel funzionamento del display dopo il caricamento del seguente sketch

#include <dht_nonblocking.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11

Adafruit_BMP085 bmp;


static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
  

}

  static bool measure_environment( float *temperature, float *humidity, float *pressure, float *altitude) 
{
  static unsigned long measurement_timestamp = millis( );

  /* Measure once every four seconds. */
  if( millis( ) - measurement_timestamp > 3000ul )
  {
    if( dht_sensor.measure( temperature, humidity ) == true )
    {
      measurement_timestamp = millis( );
      return( true );
    }
  }

  return( false );
}



void loop() {
  float temperature;
  float humidity;
  float pressure;
  float altitude;

  if( measure_environment( &temperature, &humidity, &pressure, &altitude ) == true )

{
  lcd.print( "T = " );
  lcd.println( temperature, 1 );
  lcd.setCursor(0, 1);
  lcd.print( "H = " );
  lcd.println( humidity, 1 );
  lcd.setCursor (1,1);

  delay (2000);
  
  lcd.print ( "P = " );
  lcd.print (bmp.readPressure());
  lcd.println ( pressure, 1);
  lcd.setCursor (0, 1);
  lcd.print ("A = ");
  lcd.print(bmp.readAltitude());
  lcd.println ( altitude, 1);
  lcd.setCursor (1, 1);
  

  delay (2000);
}
}

Durante lo svolgimento dello sketch il display mi mostra dei simboli strani, vi allego la foto del problema:

Riuscite per favore a dirmi il perché succede questo? e come posso risolverlo?
In breve: Arduino uno legge i sensori (DHT11 e BMP180) e visualizza sul display i valori misurati.

Buonasera e benvenuto, :slight_smile:

essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO … Grazie. :slight_smile:

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.

@fabpolli Fatto grazie, scusami ma non avevo letto il regolamento.

La funzione println trasmette anche i due byte di fineriga di codice ASCII 13 e 10, chiamati anche, CR LF o \r \n. Essendo codici non corrispondenti a caratteri stampabili, il display visualizza qualcosa senza senso.

Il monitor seriale invece li sa interpretare e gestire correttamente, riportando il cursore a inizio nuova riga.

1 Like

Dai un occhiata anche a questo topic DISTURBI LCD 20x4 e 16x4 - Risolto?
e in linea di massima conviene sempre adottare LCD con interfaccia I2C per due motivi, enorme risparmio di pin e una riduzione drastica di problematiche legate alle interferenze

1 Like

Come dice Claudio_FF, lcd.println non va usato. Per andare a capo devi scrivere
lcd.setCursor (x, 1);

1 Like

grazie mille della risposta.
Ma se io volessi visualizzare sul display i numeri interi senza la virgola come dovrei fare?

Puoi fare un cast a int.
Basta che metti (int) dentro la print prima della variabile.

lcd.print((int) altitude);

1 Like

grazie mille.