“Serial Alien Attacks LCD!”
This was a MONSTER of an assignment:
Upload eight custom characters to a Newhaven LCD display (3 wire config) via RS232 protocol using the Arduino Software Serial library.
Yea. I know. Please use the code below as a reference, because there ain’t much out there:
SoftwareSerial serial=SoftwareSerial(7, 8);
byte topL = 0x01;
byte topR = 0x02;
byte bottomL=0x03;
byte bottomR = 0x04;
byte leftFoot=0x05;
byte rightFoot=0x06;
byte handUp=0x07;
byte handDown=0x08;
void setup() {
pinMode(7, INPUT);
pinMode(8, OUTPUT);
// set serial rate
serial.begin(9600);
// turn lcd on
lcdOn();
// set lcd contrast to default 40
defltContrast();
// clear lcd
clearLCD();
// top left of alien
customChar(topL);
serial.print(0x00, BYTE);
serial.print(0x00, BYTE);
serial.print(0x0F, BYTE);
serial.print(0x1F, BYTE);
serial.print(0x19, BYTE);
serial.print(0x19, BYTE);
serial.print(0x1F, BYTE);
serial.print(0x1F, BYTE);
// top right of alien
customChar(topR);
serial.print(0x00, BYTE);
serial.print(0x00, BYTE);
serial.print(0xFE, BYTE);
serial.print(0xFF, BYTE);
serial.print(0xF3, BYTE);
serial.print(0xF3, BYTE);
serial.print(0xFF, BYTE);
serial.print(0xFF, BYTE);
// bottom left of alien
customChar(bottomL);
serial.print(0x1F, BYTE);
serial.print(0x1F, BYTE);
serial.print(0x1F, BYTE);
serial.print(0x1C, BYTE);
serial.print(0x1C, BYTE);
serial.print(0x1C, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
// bottom right of alien
customChar(bottomR);
serial.print(0xFF, BYTE);
serial.print(0xFF, BYTE);
serial.print(0xFF, BYTE);
serial.print(0xE7, BYTE);
serial.print(0xE7, BYTE);
serial.print(0xE7, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
customChar(leftFoot);
serial.print(0x1F, BYTE);
serial.print(0x1F, BYTE);
serial.print(0x1F, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
customChar(rightFoot);
serial.print(0xFF, BYTE);
serial.print(0xFF, BYTE);
serial.print(0xFF, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
customChar(handUp);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0xE4, BYTE);
serial.print(0xEC, BYTE);
serial.print(0xF8, BYTE);
serial.print(0xF0, BYTE);
serial.print(0xF0, BYTE);
customChar(handDown);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0x0, BYTE);
serial.print(0xFF, BYTE);
}
void loop(){
serial.print(topL, BYTE);
serial.print(topR, BYTE);
serial.print(handUp, BYTE);
// move cursor to second line
serial.print(0xFE, BYTE); // command flag
serial.print(69, BYTE); // cursor position command
serial.print(0x40, BYTE); // cursor position
serial.print(bottomL, BYTE);
serial.print(bottomR, BYTE);
// admire the little guy for a sec
delay(1000);
// make way for the next step
clearLCD();
serial.print(topL, BYTE);
serial.print(topR, BYTE);
serial.print(handDown, BYTE);
// move cursor to second line
serial.print(0xFE, BYTE); // command flag
serial.print(69, BYTE); // cursor position command
serial.print(0x40, BYTE); // cursor position
serial.print(leftFoot, BYTE);
serial.print(bottomR, BYTE);
delay(1000);
// clear lcd
clearLCD();
serial.print(topL, BYTE);
serial.print(topR, BYTE);
serial.print(handUp, BYTE);
// move cursor to second line
serial.print(0xFE, BYTE); // command flag
serial.print(69, BYTE); // cursor position command
serial.print(0x40, BYTE); // cursor position
serial.print(bottomL, BYTE);
serial.print(rightFoot, BYTE);
delay(1000);
// clear lcd
clearLCD();
serial.print(topL, BYTE);
serial.print(topR, BYTE);
serial.print(handDown, BYTE);
// move cursor to second line
serial.print(0xFE, BYTE); // command flag
serial.print(69, BYTE); // cursor position command
serial.print(0x40, BYTE); // cursor position
serial.print(leftFoot, BYTE);
serial.print(bottomR, BYTE);
delay(1000);
// clear lcd
clearLCD();
serial.print(topL, BYTE);
serial.print(topR, BYTE);
serial.print(handUp, BYTE);
// move cursor to second line
serial.print(0xFE, BYTE); // command flag
serial.print(69, BYTE); // cursor position command
serial.print(0x40, BYTE); // cursor position
serial.print(bottomL, BYTE);
serial.print(rightFoot, BYTE);
delay(1000);
// clear lcd
clearLCD();
delay(2000);
serial.print("Hello");
delay(2000);
// move cursor to second line
serial.print(0xFE, BYTE); // command flag
serial.print(69, BYTE); // cursor position command
serial.print(0x40, BYTE); // cursor position
serial.print("serial.");
delay(2000);
clearLCD();
}
void customChar(byte address) {
serial.print(0xFE, BYTE);
serial.print(0x54, BYTE);
serial.print(address, BYTE);
}
void clearLCD(){
// clear lcd function
serial.print(0xFE, BYTE);
serial.print(0x51, BYTE);
}
void backSpace(){
// go back one space
Serial.print(0xFE, BYTE);
Serial.print(0x4E, BYTE);
}
void serCmd(){
// command flag
serial.print(0xFE, BYTE);
}
void defltContrast(){
// set default contrast
serial.print(0xFE, BYTE);
serial.print(0x82, BYTE);
serial.print(0x51, BYTE);
}
void lcdOn(){
// turn lcd on
serial.print(0xFE, BYTE); // command flag
serial.print(0x41, BYTE); // on command
}
void shiftRight(){
serial.print(0xFE, BYTE);
serial.print(0x56, BYTE);
}
void cHome(){
// ser cursor to home position
serial.print(0xFE, BYTE); // command flag
serial.print(0x46, BYTE); // cursor home command
}
void bcOn(){
// set box cursor on
serial.print(0xFE, BYTE); // command flag
serial.print(0x4B, BYTE); // cursor on command
}
/*
void dftBaudRate(){
serial.print(0xFE, BYTE);
}
*/