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)