Apr 7, 2011
admin
Comments Off

“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);

}
*/

Comments are closed.