Problemas con Lcd Smartie

hola a todos.
Se que este programa y proyectos hay muchos...el mas reciente de 2016..si alguien conoce otro programa para usar estos lcd de 2x20 o 2x40 ,soy todo oídos..al tema.

Pues el caso que encontré este tema:
https://forum.arduino.cc/index.php?topic=205520.0

se que no tiene imágenes pero me lo baje el html hace mucho tiempo,por circunstancias de la vida lo puedo hacer ahora y quiero usar mi lcd 2x40 en arduino por usb. aquí el esquema.

Y aquí las configuraciones.

evidentemente cambien en la programación el 2x16 por 2x40

Sigo mas abajo

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)

Todo bien pero para que alguien te siga debes subir el programa en PC LCD Smartie que se ve en las imágenes sino desde acá que podemos decirte?

No entiendo para que necesitas ese programa si todo eso lo puedes hacer con código con arduino y enviando datos via Puerto serie.
No entiendo la idea, me la puedes explicar?

Hola Surbyte.

el caso es que este Prgramate da informacion del pc(temps,rpm de los ventilador,el uso de ram,cpu,gpu,musica..etc) y tengo varias pantallas alfanumericas que usaba en xp,ahora en win7 y posterior el programa no sirve porque windows no tiene o no he conseguido que funcion los controles del puerto LPT(es viejo)asi que quiero usar arduino.

si existe otro programa,decirme cual y me lo busco..

este es el link oficial del programa.

http://prdownloads.sourceforge.net/lcdsmartie/lcd_smartie_v5.4.zip?download

Existen hoy USB to LPT y tambien existen placas multipuerto USB que traen algun LPT asi que eso no debería ser impedimento.

Bien, ya lo estoy descargando y te daré mi impresión del LCD Smartie.
Espera a que lo analice.

En mi Windows 10 no hubo problemas para ponerlo en marcha.

EDITO:
Aca encontré esto
USB & serial LCD backpack
otro link
mas link

O sea olvidate de la versión LPT. Esto esta mas actualizado incluso el código esta disponible porqrue es de SourceForge

muchas gracias por tu ayuda y tiempo.investigare esto.