Problemas con Lcd Smartie

El caso que esto es lo que me sale a mi en pantalla..

Hasta aqui bien.

Esto es lo que le digo a cada linea.

y esto es lo que me sale.

he probado en distintos lcd y ordenadores y el esquema lo revisado y esta bien conectado.

aqui os pongo el codigo.

/*

// include the library code:
#include <LiquidCrystal.h>
//constants
const unsigned int numRows = 2; 
const unsigned int numColms = 40;
const unsigned int GPO1 = 13;
const unsigned int Contrast_pin = 11; //LCD Contrast pin 3
const unsigned int Brightness_pin = 3; //2N2222 transistor, Base - pin 3, Collector - +5v, Emitter - lcd Brightness pin 15
unsigned int cValue = 0; //contrast max. ~0v .. min 1.5v
unsigned int bValue = 255; //brightness max. ~4.5-5v .. min ~0v
byte rx_byte, ch_byte;

// initialize the library with the numbers of the interface pins
//            lcd(RS,RW, E,d4,d5,d6,d7);
LiquidCrystal lcd(10, 9, 8, 7, 6, 5, 4); //LCD RS - 4 pin, RW - 5 pin, Enable - 6 pin, Data4 - 11 pin, Data5 - 12 pin, Data6- 13 pin, Data7- 14 pin


void setup() {

  pinMode(GPO1, OUTPUT); //set GPO1 pin as Output
  digitalWrite(GPO1, LOW); //set GPO1 OFF
  pinMode(Contrast_pin, OUTPUT); //set Contrast pin as Output
  analogWrite(Contrast_pin, cValue); //set Contrast to max.
  pinMode(Brightness_pin, OUTPUT); //set Brightness pin as Output
  analogWrite(Brightness_pin, bValue); //set Brightness to max.
  Serial.begin(19200); //19200 is default Matrix Orbital speed (max.= 115200)
  lcd.begin(numColms, numRows); // set up the LCD's number of rows and columns: 
  LCD_CGRAM_Reset(); //for some reason after power up, there is a garbage in CGRAM. Do the trick, fill all CGRAM with blocks
  lcd.clear(); // clear LCD memory and move cursor to 0,0
  lcd.print("**LCD  SMARTIE**");
  lcd.setCursor(0,1);
  lcd.print("Arduino  Orbital");
}


byte serial_getCh() { //read and returne one byte
  while (Serial.available() == 0); // loop continuously, until the expression == 0, becomes false
  return Serial.read();
}

void LCDcustomChar5x8() {
 byte customCh[8];
 byte addr = serial_getCh(); //get custom simbol addr (up to. 8 simbols)
 for (unsigned int i = 0; i < 8; i ++) {
   customCh[i] = serial_getCh(); //get 5 pixels of custom pattern x 8 times
 }
 lcd.createChar(addr, customCh); //load custom simbol to the CGRAM
}

void LCD_CGRAM_Reset() { //for some reason after power up, there is a garbage in CGRAM. Do the trick, fill all CGRAM with blocks
  byte solidBlock[8]={31,31,31,31,31,31,31,31};
  for (unsigned int i = 0; i < 8; i ++) { 
    lcd.createChar(i, solidBlock); //create custom simbol (custom simbol addr, custom simbol), max. 8 simbols
  }
}

void loop() {
  
  ch_byte = serial_getCh();
   
  if (ch_byte == 0xFE) { //0xFE(254) - Matrix Orbital Prefix followed before any command
    switch (rx_byte = serial_getCh()) { //take next command byte an "swich" it
        case 53: //read serial number, 2 bytes
        Serial.print(0x0D,0x03); //1303
        break;
        case 54: //read firmware version number, 1 byte
            Serial.print(0x22); //0x22 - LK162-12, 0x57 - LK204-25
            break;
        case 55: //read module type
            Serial.print(0x34); // 0x34 - LK162-12, 0x9 - LK204-25
            break;
        case 66: //backlight on (min) if min = 0 ramain indefinitely
        if (serial_getCh() >= 0) {
            analogWrite(Brightness_pin, bValue);
          }
            break;
        case 70: //backlight off
            analogWrite(Brightness_pin, 0);
            break;
        case 71: //set cursor position (column, row)
            lcd.setCursor(serial_getCh()-1, serial_getCh()-1); //(take next bit after 71 and -1, take another bit and -1)
            break;
        case 72: //cursor home but don't clear the screen
            lcd.setCursor(0,0);
            break;
        case 74: //underline cursor on
            lcd.cursor();
            break;
        case 75:  //underline cursor off
            lcd.noCursor(); 
            break;
        case 76: //move cursor left
            lcd.scrollDisplayLeft();
            break;
        case 77: //move cursor right
            lcd.scrollDisplayRight();
            break;
        case 78: //define custom char (id, data)
            LCDcustomChar5x8();
            break;
        case 80: //set contrast, 0-255 (0x00-0xff)
            cValue = map(serial_getCh(),0,255,75,0); // map slider's min .. max to 1.5v .. 0v
            analogWrite(Contrast_pin, cValue);
            break;
        case 81: //auto scroll on
            lcd.autoscroll();
            break;
        case 82: //auto scroll off
            lcd.noAutoscroll();
            break;
        case 83: //blinkin block cursor on
            lcd.blink();
            break;
        case 84:  //blinking block cursor off
            lcd.noBlink();
            break;
        case 86: //GPO off (originaly Matrix orbital has 7 GPO, 1..7)
            if (serial_getCh() >= 0) {
              digitalWrite(GPO1, LOW);
            }
            break;
        case 87: //GPO on (originaly Matrix orbital has 7 GPO, 1..7)
            if (serial_getCh() >= 0) {
            digitalWrite(GPO1, HIGH);
            }
            break;
        case 88: //clear display, cursor home
            lcd.clear();
            break;
        case 104: //initialize horizontal bar
            LCDcustomChar5x8();
            break;
        case 115: //initialize narrow vertical bar
            LCDcustomChar5x8();
            break;        
        case 118: //initialize wide vertical bar
            LCDcustomChar5x8();
            break;
         case 152: //set brightness, 0-255 (0x00-0xff)
            bValue = map(serial_getCh(),0,255,25,255); //map slider's min .. max to 0.44v .. 4.5-5v
            analogWrite(Brightness_pin, bValue);
            break;
          case 35: //place large number (col, digit)
          case 37: //GPO or keypad mode (mode)
          case 38: //poll key presses
          case 51: //change I2C slave address (address)
          case 52: //set serial number (byte_1, byte_2)
          case 57: //set baud rate (baud rate)
          case 58: //enter flow control mode (full, empty)
          case 59: //exit flow-control mode
          case 61: //draw vertical bar (2 parameters, column, length)
          case 64: //load the startup screen
          case 65: //auto transmit keypresses on
          case 67: //auto line wrap on (R)
          case 68: //auto line wrap off (R)
          case 69: //clear key buffer
          case 79: //auto transmit keypress off
          case 85: //set debounce time (time)
          case 96: //auto repeat mode off
          case 109: //initialize medium number
          case 110: //initialize lange numbers
          case 111: //place medium numbers
          case 124: //place horizontal bar graph (column, row, direction, length)
          case 126: //set auto repeat mode (mode)
          case 145: //set and save contrast (contrast)
          case 153: //set and save brightness (brightness)
          case 160: //transmission protocol select (protocol)
          case 192: //load custom characters (bank)
          case 164: //setting a non-standart baudrate (speed)
          case 193: //save custom character (bank, id, data)
          case 194: //save startup screen custom characters (id, data)
          case 195: //set startup GPO state (number, state)
          case 200: //dallas 1-Wire
          case 213: //assign keypad codes
             lcd.clear();
             lcd.print(" Command No. ");
             lcd.print(rx_byte);
             lcd.setCursor(0,1);
             lcd.print("is not supported");
             delay(300);
             break;
        default: // if nothing else matches, do default switch
               Serial.flush(); //unrecognized commands , flush the buffer.
    } // end of "switch", also "break" point
  } //end of "if"
  else {
     lcd.write(ch_byte); //else it's a plain char, write to LCD
  } //end of "else"
} //end of scketch :(

pues eso..si alguien conoce otra manera de usar esto para el pc,lo agradezco

LCD_Smartie_Matrix_Orbital.ino (8.16 KB)