I am trying to get this LCD working, but it seems nothing I do works.
I started searching around, and I found a link, but it's dead. Link: www.cyberblob.net/parallaxlcd.zip
My code isn't working either. Here is my code:
And on the back of the LCD device, I have switch 1 set to off, and switch 2 set to on, which is what they ask me to do in the documentation.
I've also tried changing all "Serial.write" to "Serial.print" and "Serial.println" and nothing happened still.
I think that you have to send it some text to display.
And make sure the DIPswitches are right for 9600.
(If you don't have the backlight version then that won't work.)
When using Arduino TX (D1/pin1) you should probably disconnect the USB first? Not sure.
Disconnect the LCD from TX when programming. Disconnect USB. Connect LCD. Power up. ?
The LCD does not need to be 'refreshed'. Any information that you send to it will remain there until it is overwritten.
You generally only send information to the display in loop() if that information is changing, such as periodically updating a clock.
If you want to see if you can successfully display anything on the display you will have to do this in setup(). You should go back and try sending some information to the display in setup() and get that part working before you try to do anything with loop().
Don
[Edit]: Did you look at the Arduino 'kickstart' example that was referred to in Reply #1? Did you notice that loop() has nothing in it?
mySerial.begin(Baud);
delay(100);
mySerial.write(12); // Clear
mySerial.write(17); // Turn backlight on
delay(5); // Required delay
mySerial.print("Hello, world..."); // First line
mySerial.write(13); // Form feed
mySerial.print("from Ernie!"); // Second line
mySerial.write(212); // Quarter note
mySerial.write(220); // A tone
I wrote this code this morning and it worked first time before I started playing with it but it may help.
If you want to make your post a lot more useful then you could add some comments that explain the magic numbers in your loop expressions.
If you want to make your post a lot more legible you could highlight the code portion of the post and use the 'code' button (the #) to make it look like the code in reply #1
Here is a program which uses the serial display and a simple pot fro gnd to +5 and it works as a voltmeter.
Hope it is helpful to others.
Ernie
/*
LiquidCrystal Serial
Demonstrates the use a Paralax 2X16 Serial LCD display.
This sketch prints "Hello, world..." to the first line LCD
and "From Ernie" in the second line. It then loops with a
counter running and plays with the backlight and display.
The circuit:
* LCD Serial Pin to digital pin 7
By Ernie Bose
Created 2 May 2012
by Ernie Bose
This example code is in the public domain.
display information can be found here:
http://www.parallax.com/Portals/0/Downloads/docs/prod/audiovis/27976-7-9-ParallaxSerialLCD-v3.0.pdf
The command set describes what each command does to the display.
*/
//============================================================================
// Constants used so all the setup stuff is in one place
//============================================================================
const int TxPin = 7; // serial output to display
const int VinPin = A0; // analog input for measurement
const int Baud = 9600;
#include <SoftwareSerial.h>
SoftwareSerial mySerial = SoftwareSerial(255, TxPin);
//============================================================================
// The int2voltstr subroutine converts an integer value in the range 0 to 1024
// and converts it to a string of the format 00.00. The value is scaled by the
// map function so that the range is scaled to represent 0 to 500 for 5 volts.
//
// The string is returned.
//============================================================================
String int2voltstr (int v)
{
int vv = v;
char voltageString[6];
// Do these two first since they don't change:
voltageString[5] = 0; // Null termination for the string
voltageString[2] = '.'; // Decimal separator can be changed to comma
// Make the value be in between 0 and 500
int mappedValue = map( vv, 0, 1023, 0, 500 );
// Working backwards, take the bottom digit and shift
voltageString[4] = '0' + mappedValue % 10; // Take the bottom digit
mappedValue /= 10; // Shift by one digit
voltageString[3] = '0' + mappedValue % 10; // Take the bottom digit
mappedValue /= 10; // Shift by one digit
// Decimal was already written above, skip voltageString[2]
voltageString[1] = '0' + mappedValue % 10; // Take the bottom digit
mappedValue /= 10; // Shift by one digit
voltageString[0] = '0' + mappedValue % 10; // Take the bottom digit
return voltageString;
}
void setup() {
pinMode(TxPin, OUTPUT);
digitalWrite(TxPin, HIGH);
pinMode(VinPin, INPUT);
mySerial.begin(Baud); // Set serial Baud rate
delay(100); // wait for the display
mySerial.write(12); // Clear
mySerial.write(17); // Turn backlight on
delay(5); // Required delay
// The next lines are for debug purposes and not needed in the final
//mySerial.print("Hello, world..."); // First line
//mySerial.write(13); // Form feed
//mySerial.print("from Ernie!"); // Second line
//mySerial.write(212); // Quarter note
//mySerial.write(220); // A tone
}
void loop() {
String strVolts; // String to store the results
int volts = analogRead(VinPin); // Get the value from the input pin
mySerial.write(12); // write form feed to the display to clear
mySerial.write(148); // put the cursor at the beginning of line 2
mySerial.print(volts); // print the raw analog pin data
strVolts = int2voltstr (volts); // convert the raw data into a scaled string
mySerial.write(128); // put the cursor on the top line
mySerial.print(" Volts = ");
mySerial.print(strVolts); // print Volts = xx.xx
delay(200); // let the display catch up and do it again
}