LCD texto subrayado

Aqui tienes dos formas de construir caracteres:

La intuitiva:

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);




void setup() {
  
  // Creando un caracter customizado
byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};
lcd.createChar(0, smiley);
// ----------------------------
  lcd.begin(16, 2);  
  
  lcd.clear();
  lcd.print("hello");
  delay(500);
  lcd.clear(); 
  lcd.write(0);
  
  
}

void loop() {}

Y la forma mas comun:

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


void setup() {

lcd.clear();
lcd.begin(16, 2); // 20 ROWS / 4 LINES
  
// Creando un caracter customizado
uint8_t B_[8] =  {0x00, 0x11, 0x00, 0x00, 0x11, 0x0e, 0x00, 0x00}; // Smiley
lcd.createChar(1, B_);
lcd.home(); 
// ----------------------------


  lcd.print("hello");
  delay(500);
  lcd.clear();
  lcd.write(1);
}

void loop() {}