My little LCD menu. Several options and features.

Late to the conversation. I have used the LCD117 ($14) from http://www.moderndevice.com/products/lcd117-kit with my own LCD's. no problems. It reads at 9600, not 2400.
LCD117 Comands: http://cdn.shopify.com/s/files/1/0038/9582/files/LCD117_Board_Command_Summary.pdf?1260768875
Sparkfun's Commans: http://www.sparkfun.com/datasheets/LCD/SerLCD_V2_5.PDF

I use this in the setup section of my sketch:

Serial1.begin(9600); //configure display for 4x20
Serial1.print("?G420"); //configure display for 4x20
delay(100);
Serial1.print("?Bff"); //ensure Backlight is on
delay(100);
Serial1.print("?s7"); //Set tab to 7
delay(100);
Serial1.print("?fHello, JC!");

They are pretty flexible. I have never used the sparkfun LCD backpack. CaptainObvious has good information about building your own. It would be something that is extensible and easily modified for different needs. In fats, I think I'm going to do that this week and post back.

Below is an arduino demo sketch for the LCD117:

#include <SoftwareSerial.h>

/* port of Peter Anderson's LCD117_1.BS2 (Parallax Basic Stamp 2) to Arduino
Paul Badger 2007
Comments and bug fixes Ian Patterson 9/08
original Peter H. Anderson, Baltimore, MD, Oct, '06

Configured for 2 x 16 display
Printing demonstration will probably look ugly with shorter displays
Delays in bargraph section are probably longer than necessary as a new version of the firmware
has been implemented since this demo was written.

Delays may be tweaked by reducing the delay time until the LCD117 chip crashes
(As shown by appearance of startup screen. Don't worry you won't hurt anything.)
Then increase the delay a tad.

I took some liberties with code

  • changed printing demonstration slightly
  • eliminated speaker demonstration
  • extended bar graph section
    */

char N;
int I;
int ByteVar;

int NN;
int Remainder;
int Num_5;

#define rxPin 4 // rxPin is immaterial - not used - just make this an unused Arduino pin number
#define txPin 14 // pin 14 is analog pin 0, on a BBB just use a servo cable :), see Reference pinMode
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);

// mySerial is connected to the TX pin so mySerial.print commands are used
// one could just as well use the software mySerial library to communicate on another pin

void setup(){

pinMode(txPin, OUTPUT);
mySerial.begin(9600); // 9600 baud is chip comm speed

mySerial.print("?G216"); // set display geometry, 2 x 16 characters in this case
delay(500); // pause to allow LCD EEPROM to program

mySerial.print("?Bff"); // set backlight to ff hex, maximum brightness
delay(1000); // pause to allow LCD EEPROM to program

mySerial.print("?s6"); // set tabs to six spaces
delay(1000); // pause to allow LCD EEPROM to program

mySerial.print("?D00000000000000000"); // define special characters
delay(300); // delay to allow write to EEPROM
// see moderndevice.com for a handy custom char generator (software app)
mySerial.print("?f"); // clear the LCD
delay(10);
mySerial.print("...");

//crashes LCD without delay
mySerial.print("?D11010101010101010");
delay(300);

mySerial.print("?D21818181818181818");
delay(300);

mySerial.print("?D31c1c1c1c1c1c1c1c");
delay(300);

mySerial.print("?D41e1e1e1e1e1e1e1e");
delay(300);

mySerial.print("?D51f1f1f1f1f1f1f1f");
delay(300);

mySerial.print("?D60000000000040E1F");
delay(300);

mySerial.print("?D70000000103070F1F");
delay(300);

mySerial.print("?c0"); // turn cursor off
delay(300);

}

continued on in next post