This is the Arduino implementation for the ioBridge Serial LCD 2x16. The documentation for the this LCD is found on the ioBridge Wiki. Features include scrolling messages, animated back light control, and horizontal and vertical gauges.
The Serial LCD Screen requires Power, Ground, and Serial Signal Pin (using Pin 1 [Tx] from Arduino).

Arduino connections to LCD Screen
Code includes a demo of all of the features plus the library of functions used to automate features.
//
// ioBridge.com Serial LCD Demo and Functions
//
void setup() {
// The ioBridge Serial LCD Uses a Baud Rate of 9600 on Pin 1
Serial.begin(9600);
}
void loop()
{
// Clear LCD Screen
clearLCD();
// Set Background to a brightness level
setBacklightBrightness(9);
// Display a message from the current cursor position
displayMessage("Serial LCD by...");
delay(2000);
// Move cursor then display a message
moveCursor("02", "03");
displayMessage("ioBridge.com");
delay(2000);
// Turn on and off cursor
clearLCD();
displayMessage("Cursor On");
moveCursor("02", "01");
turnCursorOn();
delay(2000);
moveCursor("01", "01");
displayMessage("Cursor Off");
moveCursor("02", "01");
turnCursorOff();
delay(2000);
// Turn on and off blinking cursor
clearLCD();
displayMessage("Blinking Cursor On");
moveCursor("02", "04");
turnBlinkingCursorOn();
delay(2000);
moveCursor("01", "01");
displayMessage("Blinking Cursor Off");
moveCursor("02", "01");
turnBlinkingCursorOff();
delay(2000);
// Ccroll messages on both lines
clearLCD();
scrollMessage(1, 8, "Scrolling Messages...");
scrollMessage(2, 8, "GOOG: $476.10");
delay(10000);
// Draw horizontal gauages
clearLCD();
displayMessage("Horizontal Gauge");
drawHorizontalGauge(2, "LO", "HI", "c");
delay(1000);
drawHorizontalGauge(2, "LO", "HI", "d");
delay(1000);
drawHorizontalGauge(2, "LO", "HI", "b");
delay(2000);
// Draw vertical gauges
clearLCD();
displayMessage("Vertical Gauges");
moveCursor("02", "01");
drawVerticalGauge(0);
delay(100);
drawVerticalGauge(1);
delay(100);
drawVerticalGauge(2);
delay(100);
drawVerticalGauge(3);
delay(100);
drawVerticalGauge(4);
delay(100);
drawVerticalGauge(5);
delay(100);
drawVerticalGauge(6);
delay(100);
drawVerticalGauge(7);
delay(100);
drawVerticalGauge(8);
delay(100);
drawVerticalGauge(7);
delay(100);
drawVerticalGauge(6);
delay(100);
drawVerticalGauge(5);
delay(100);
drawVerticalGauge(4);
delay(100);
drawVerticalGauge(3);
delay(100);
drawVerticalGauge(2);
delay(100);
drawVerticalGauge(1);
delay(2000);
// Fade backlight to brightness 1 after 2 seconds
clearLCD();
displayMessage("-Fade Backlight-");
setBacklightTime(1, 2);
delay(5000);
}
//
// ioBridge Serial LCD Functions and Parameters
//
void displayMessage(char* message){
Serial.print(message);
}
void clearLCD(){
Serial.print(0xFE, BYTE);
Serial.print("Z");
}
void setBacklightBrightness(int level){
// level
// 0=Off -> 9=Brightest
Serial.print(0xFE, BYTE);
Serial.print("B");
Serial.print(level);
}
void setBacklightTime(int level, byte seconds){
// level
// 0=Off -> 9=Brightest
// seconds
// 01 = 1 seconds => 06 = 60 seconds
Serial.print(0xFE, BYTE);
Serial.print("T");
Serial.print(level);
Serial.print(seconds, BYTE);
}
void moveCursorHome(){
Serial.print(0xFE, BYTE);
Serial.print("H");
}
void turnCursorOn(){
Serial.print(0xFE, BYTE);
Serial.print("J");
}
void turnCursorOff(){
Serial.print(0xFE, BYTE);
Serial.print("K");
}
void turnBlinkingCursorOn(){
Serial.print(0xFE, BYTE);
Serial.print("P");
}
void turnBlinkingCursorOff(){
Serial.print(0xFE, BYTE);
Serial.print("Q");
}
void scrollMessage(int row, int speed, char* message){
// row
// 1=First Line -> 2=Second Line
// speed
// 0=Slowest -> 9=Fastest
Serial.print(0xFE, BYTE);
Serial.print("S");
Serial.print(row);
Serial.print(speed);
Serial.print(message);
Serial.print(0xFE, BYTE);
}
void moveCursor(char* row, char* column){
// row
// 01=First Line -> 02=Second Line
// column
// 01=First Position -> 16=Last Position
Serial.print(0xFE, BYTE);
Serial.print("L");
Serial.print(row);
Serial.print(column);
}
void drawHorizontalGauge(int row, char* leftLabel, char* rightLabel, char* length){
// row
// 1=First Line -> 2=Second Line
// leftLabel and rightLabel
// 2 character labels
// length
// a=Empty -> k=Full (filled in from left to right)
Serial.print(0xFE, BYTE);
Serial.print("G");
Serial.print(row);
Serial.print(leftLabel);
Serial.print(rightLabel);
Serial.print(length);
}
void drawVerticalGauge(int height){
// height
// 0=Bottom -> 8=Top (filled in from bottom to top)
Serial.print(0xFE, BYTE);
Serial.print("V");
Serial.print(height);
}