Disegnare una batteria a 3/4 tacche sul display

Salve, avrei la necessità di disegnare una sorta di batteria a 3/4 tacche su un display 2x16 che funzione in I2C,
la libreria che utilizzo è: LiquidCrystal_I2C, ho bisogno di aiuto con il codice perché non so proprio in che modo procedere.

Devi usare la funzione lcd.createChar() --> LiquidCrystal - Arduino Reference
Qui un tool online --> Custom Character Generator for HD44780 LCD Modules
Devi creare un carattere per ogni livello di carica. (Custom LCD Characters with Arduino - hackmeister.dk)

Ciao PaoloP grazie mille, non sapevo esistessero questi tool online, comunque ho subito scritto il codice che mi serviva, adesso avrei un'altro problema, tutto il codice viene eseguito in loop in ritardo come se ci fosse un delay come mai?

se googli arduino orizzontal progress bar trovi molti esempi

Davide-1991:
Ciao PaoloP grazie mille, non sapevo esistessero questi tool online, comunque ho subito scritto il codice che mi serviva, adesso avrei un'altro problema, tutto il codice viene eseguito in loop in ritardo come se ci fosse un delay come mai?

Boh!!
Non so che Arduino hai. Non so che codice hai scritto. Non ho la sfera di cristallo. :sweat_smile:

Scusate ho dimenticato di inserire il codice,
ecco il codice:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "TUNE.h"

// Display LCD
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
char nome[] = "ARDUROVER-MEGA";
char versione[] = "V 1.0.8";
String ContenutoTextLCD = "";
char TextLCD;

// MONITOR BATTERIA
const int vmeterl = 0; //A0
int voltcl = 0;
int vmeterlraw = 0;
const int batteria_carica = 840;
const int tacca_2 = 780;
const int tacca_3 = 720;
const int batteria_scarica = 680; // Limite allarme batteria in volt

// DISEGNO BATTERIA
byte batteria1[8] = {
	0b00000,
	0b11110,
	0b00011,
	0b00001,
	0b00001,
	0b00011,
	0b11110,
	0b00000
};
byte batteria2[8] = {
	0b00000,
	0b11111,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b11111,
	0b00000
};
byte batteria3[8] = {
	0b00000,
	0b11111,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b11111,
	0b00000
};
byte batteria4[8] = {
	0b00000,
	0b11111,
	0b10000,
	0b10000,
	0b10000,
	0b10000,
	0b11111,
	0b00000
};
// TACCHE BATTERIA
byte batteria_tacca1[8] = {
	0b00000,
	0b11110,
	0b11110,
	0b11111,
	0b11111,
	0b11110,
	0b11110,
	0b00000
};
byte batteria_tacca2[8] = {
	0b00000,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b00000
};
byte batteria_tacca3[8] = {
	0b00000,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b00000
};
byte batteria_tacca4[8] = {
	0b00000,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b11111,
	0b00000
};

// LED RGB
const int r = 8;
const int g = 9; 
const int b = 10;

// PIEZO
const int piezo = 24;
int startMelody[] = {
  NOTE_E4, NOTE_D4, NOTE_E4, 0, NOTE_F4, NOTE_D5, NOTE_C5};
int noteDurations[] = {
  8, 8, 8, 10, 4, 8, 4 };

// SETUP
void setup() {
  pinMode(r, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(piezo, OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd.print(nome);
  lcd.setCursor(0, 1);
  lcd.print(versione);
  Serial.begin(115200);
}

void loop() {
  vmeterlraw = analogRead(vmeterl);
  voltcl = map(vmeterlraw, 0, 1023, 0, 5415);
  monitor_batteria();
  batteria_display();
  
  Serial.print("voltage is: ");
  Serial.print(voltcl / 102,DEC);
  Serial.print(".");
  Serial.println(voltcl % 102,DEC);
}

void batteria_display() {
  lcd.createChar(1, batteria1);
  lcd.createChar(2, batteria2);
  lcd.createChar(3, batteria3);
  lcd.createChar(4, batteria4);
  lcd.createChar(5, batteria_tacca1);
  lcd.createChar(6, batteria_tacca2);
  lcd.createChar(7, batteria_tacca3);
  lcd.createChar(8, batteria_tacca4);
  lcd.begin(16, 2);

  if (voltcl >= batteria_carica) {   
    lcd.setCursor(13, 1);
    lcd.write((uint8_t)5);
  } 
  else {
    lcd.setCursor(13, 1);
    lcd.write((uint8_t)1);
  }
  if (voltcl >= tacca_2) {
    lcd.setCursor(12, 1);
    lcd.write((uint8_t)6);
  } 
  else {
    lcd.setCursor(12, 1);
    lcd.write((uint8_t)2);
  } 
  if (voltcl >= tacca_3) {
    lcd.setCursor(11, 1);
    lcd.write((uint8_t)7);
  } 
  else {
    lcd.setCursor(11, 1);
    lcd.write((uint8_t)3);
  }
  if (voltcl >= batteria_scarica) {
    lcd.setCursor(10, 1);
    lcd.write((uint8_t)8);
  } 
  else {
    lcd.setCursor(10, 1);
    lcd.write((uint8_t)4);
  }

  lcd.setCursor(0, 0);
  lcd.print(nome);
  lcd.setCursor(0, 1);
  lcd.print(versione);
}

void monitor_batteria() {
  if(voltcl <= batteria_scarica && voltcl <= 490 ) {
    lcd.clear();
    lcd.print("BATTERIA SCARICA");
    lcd.setCursor(0, 1);
    lcd.print(voltcl / 102,DEC);
    lcd.print(".");
    lcd.print(voltcl % 102,DEC);
    lcd.setCursor(5, 1);
    lcd.print("V");
    tone(piezo, NOTE_C4);
    digitalWrite(r, HIGH);
    digitalWrite(g, LOW);
    digitalWrite(b, LOW);
    delay(250);
    digitalWrite(r, LOW);
    digitalWrite(g, LOW);
    digitalWrite(b, LOW);
    noTone(piezo);
    delay(250);
  }
}

Questo

lcd.createChar(1, batteria1);
  lcd.createChar(2, batteria2);
  lcd.createChar(3, batteria3);
  lcd.createChar(4, batteria4);
  lcd.createChar(5, batteria_tacca1);
  lcd.createChar(6, batteria_tacca2);
  lcd.createChar(7, batteria_tacca3);
  lcd.createChar(8, batteria_tacca4);
  lcd.begin(16, 2);

va nel setup() non nel loop()

Grazie ancora PaoloP finalmente ho risolto, tutto funziona alla perfezione adesso.
Ciaoo.