Hi
i have recently been working with a TextStar serial LCD, see (http://cats-whisker.com/web/node/7). It is a great little product and makes working with a display very easy for a novice. Although the Textstar is not the cheapest display you can buy it does have some additional features, such as serial interface, bar graphing, line wrap and 4 buttons.
here is my code if it is of use to anyone, it builds upon Rowan Simms (http://rowansimms.com) textstar tutorial.
James
/*
3rd Jan 2011 - experiments with Textstar LCD
objectives
1 - connect to screen and display message - done
2 - draw a static graph - done
3 - draw a dynamic graph - done
4 _ read buttons when pressed - not done
5 - display live data from sensors - not done
with thanks to
Rowan Simms (http://rowansimms.com) textstar tutorial
Mikal Hart (http://arduiniana.org) New Soft Serial Libralty
*/
#include <NewSoftSerial.h> // real serial is being used for debug with arduino gui
NewSoftSerial serial_lcd(10, 9); //rx tx
void serial_lcd_WriteLine(int lineNum);
void serial_lcd_ShowLine(int lineNum);
void serial_lcd_init();
void serial_lcd_Graph(int graphStyle, int graphLength, int graphPercent);
// static data for graph example
int graphStyle = 98; // 98 = capped barchart, 66 = open
int graphLength = 12; // max length 16, allows a description of 4 chars
// int graphPercent = 42; //value from sensor??
int fuelPercent = 25;
int altPercent = 65;
void setup (){
// print to laptop
Serial.begin(115200);
Serial.println("Arduino & TextStar LCD example");
Serial.println("Dynamic Graphs");
Serial.println("by James McEwan");
// print to serial_lcd
serial_lcd.begin(9600); // textstar happy at this speed
serial_lcd_init();
serial_lcd_WriteLine(1);
serial_lcd.println("Textstar Demo");
serial_lcd_WriteLine(2);
serial_lcd.println("by James McEwan");
serial_lcd_ShowLine(1);
delay(3000); // give you a chance to see the result
// show initial values
serial_lcd_init();
serial_lcd_WriteLine(1);
serial_lcd.print("Fuel ");
serial_lcd.print(fuelPercent);
serial_lcd.print("%");
serial_lcd_WriteLine(2);
serial_lcd.print("Alt ");
serial_lcd.print(altPercent);
serial_lcd.print("%");
serial_lcd_ShowLine(1);
delay(3000); // give you a chance to see the result
}
void loop (){
// changes bar chart
serial_lcd_init();
serial_lcd_WriteLine(1);
serial_lcd.print("Fuel");
serial_lcd_Graph(graphStyle, graphLength, fuelPercent ); // draw the graph
serial_lcd_WriteLine(2);
serial_lcd.print("Alt ");
serial_lcd_Graph(graphStyle, graphLength, altPercent ); // draw the graph
serial_lcd_ShowLine(1);
//delay(50); // give you a chance to see the result
fuelPercent = --fuelPercent;
altPercent = ++altPercent;
// stop the % going negative - optional
if (fuelPercent == 0) {
fuelPercent = 1;
}
if (altPercent == 0) {
altPercent = 99;
}
}
/* Sends LCD command sequence to initialise the LCD
* Sets cursor style to 'no cursor'
*/
void serial_lcd_init() {
delay(2500); // let the screen initialise if it has only just been powered up
/* Clear the display and take us to line 1 cell 1
* Notice that this instruction to the LCD does not
* require a command-bit to be send first
*/
serial_lcd.println(12,BYTE);
/* Setup the Cursor Style */
serial_lcd.print(254,BYTE); // we are sending a command
serial_lcd.print(67,BYTE); // we wish to set the cursor style
serial_lcd.println(0,BYTE); // we wish to have no cursor
}
/* Sends LCD command sequence to write to LCD line n
* @param int lineNum Line Number to write to
*/
void serial_lcd_WriteLine(int lineNum) {
serial_lcd.print(254,BYTE); // we are sending a command
serial_lcd.print(76,BYTE); // goto line n command
serial_lcd.print(lineNum,BYTE); // clears the line the line number (1-16)
}
/* Sends LCD command sequence to display to LCD line n
* @param int lineNum Line Number to display (top of screen)
* will show n and n+1
*/
void serial_lcd_ShowLine(int lineNum) {
serial_lcd.print(254,BYTE); // we are sending a command
serial_lcd.print(71,BYTE); // display the following line number
serial_lcd.println(lineNum,BYTE); // the line number (1-16)
}
void serial_lcd_Graph(int graphStyle, int graphLength, int graphPercent){
serial_lcd.print(254,BYTE); // we are sending a command
serial_lcd.print(graphStyle, BYTE); // setting style 98 for closed graph or 66 for open graph
serial_lcd.print(graphLength, BYTE); //setting the number of chars 16 max
serial_lcd.print(graphPercent, BYTE); // setting the value to display
}