Char e string display

Ciao a tutti.
Mi sto imbattendo in un problema non da poco, almeno per me che sono alle prime armi.
Vorrei visualizzare su un display 4*20 una riga con lo stato di alcune variabili.
In realtà, lo stato è determinato da dei simboli che ho costruito; questo lo sketch:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27,20,4);

#define IN 50
byte OFF_char[8] = {
        B00000,
        B01110,
        B10001,
        B10001,
        B10001,
        B10001,
        B01110,
        B00000
};
byte ON_char[8] = {
        B00000,
        B01110,
        B11111,
        B11111,
        B11111,
        B11111,
        B01110,
        B00000
};


byte UP_char[8] = {
        B00001,
        B00010,
        B00010,
        B00100,
        B00100,
        B01000,
        B11000,
        B10000
};
byte DW_char[8] = {
        B10000,
        B01000,
        B01000,
        B00100,
        B00100,
        B00010,
        B00010,
        B00001
};
byte a=12;
char buffer[21];
unsigned long time_rate=0;


void setup() {
    pinMode(IN,INPUT);
    Wire.begin();
    RTC.begin();
    lcd.init();
    lcd.backlight();
        if (! RTC.isrunning()) {
      Serial.println("RTC is NOT running!");
      RTC.adjust(DateTime(__DATE__, __TIME__));
    }
    lcd.createChar(0, ON_char);
    lcd.createChar(1, OFF_char);
    lcd.createChar(2, UP_char);
    lcd.createChar(3, DW_char);

    lcd.setCursor(0,0);
    lcd.write(byte(0));
    /*
    lcd.createChar(1, newChar2);
    lcd.createChar(2, newChar3);
    lcd.createChar(3, newCharup);
    lcd.createChar(4, newChardw);
*/
    
}



void loop() {
    
    if (time_rate<millis()){                                            //refresh ogni secondo
    time_rate = millis() + 1000;
    display();
    } 
}
void display(){
  DateTime now = RTC.now();
    
    lcd.setCursor(0,0);
    lcd.print("  Central-fade Mao  ");
    
    sprintf (buffer,  "%02d/%02d/%4d", now.day(), now.month(), now.year());
    lcd.setCursor(0,1);
    lcd.print( buffer );
        char buffer[21] = "";
 
    sprintf(buffer,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
       lcd.setCursor(12,1);
    lcd.print( buffer );
    
    lcd.setCursor(0,2);
    lcd.print("L1 L2 L3 out12345678");
    //visualizza lo stato uscite pwm
    
    lcd.setCursor(0,3);
    lcd.write(byte(0));
    lcd.write(byte(2));
        lcd.setCursor(3,3);
    lcd.write(byte(0));
    lcd.write(byte(3));
        lcd.setCursor(6,3);
    lcd.write(byte(1));
    lcd.write(byte(2));
    // visulaizza lo stato relè
        
        for(int i=0;i<8;i++){
         lcd.setCursor(a,3); 
        lcd.write(byte(0));
        a=a+1;
        if(a==20){
          a=12;
          }
        }
    
 }

Questo è puramente dimostrativo, e scrive nella quarta riga caratteri fissi.
Nella quarta riga vorrei che i caratteri assumano i valori reali e non fissi come li ho scritti.
Come posso fare???
Grazie.

Ma lo compila senza errori ?
Quello che non capisco è la funzione byte() in lcd.write(byte(2));
È una funzione o un indice ad un array ?

Be hai le variabili e il loro valore, userai le strutture di controllo condizionale per decidere quale carattere stampare

Esempio

if(variabile==10)
      lcd.createChar(0, ON_char);
else if(variabile==0)
       lcd.createChar(0, off_char);

ExperimentUno:
Ma lo compila senza errori ?
Quello che non capisco è la funzione byte() in lcd.write(byte(2));

E' un cast. Scritto lcd.write( (byte)2); è uguale.

Grazie per la risposta. Proverò di metterla nel mio sketch. Però pensavo di preparare un array o un stringa con già i simboli pronti da far poi scrivere al display....ma nn ci riesco...

torn 24 grazie per la risposta, le strutture condizionali come la hai messe te non le capisco, a cosa fa riferimento variabile ==10 o ==0?
Ad ogni modo forse non mi sono fatto capire bene su quello che vorrei fare.
riga 3 L1 L2 L3 out12345678
riga 4 0/ 0\ 0/ 00000000
Sulla quarta riga del display voglio scrivere dei caratteri speciali che variano in base a delle variabili (0 e / \ ON_char, OFF_char, UP_char e DW_char).
Pensavo di costruire un arrai di 20 variabili, assegnando alla posizione 0 il primo stato di L1, alla posizione 1 Up o Dw char di L1 e così via per poi mandarlo in visualizzazione al display.
Ho molta confusione e non riesco a realizzare quello che ho descritto.
Chi mi può aiutare?
Grazie.