Go Down

Topic: Arduino 1.0 with Sparkfun Serial LCD (Read 1 time) previous topic - next topic

ChrisLong

Hi

In upgrading to Arduino 1.0 I have ammended the LCD.print commands to Serial.write as follows:

Code: [Select]
#include <SoftwareSerial.h>

#define txPin 2

SoftwareSerial LCD = SoftwareSerial(0, txPin);
// since the LCD does not send data back to the Arduino, we should only define the txPin
const int LCDdelay=10;  // conservative, 2 actually works

// wbp: goto with row & column
void goTo(int row, int col) {
  Serial.write(0xFE);   //command flag
  Serial.write(col + row*64 + 128);    //position
  delay(LCDdelay);
}
void clearLCD(){
  Serial.write(0xFE);   //command flag
  Serial.write(0x01);   //clear command.
  delay(LCDdelay);
}
void backlightOn() {  //turns on the backlight
  Serial.write(0x7C);   //command flag for backlight stuff
  Serial.write(157);    //light level.
  delay(LCDdelay);
}
void backlightOff(){  //turns off the backlight
  Serial.write(0x7C);   //command flag for backlight stuff
  Serial.write(128);     //light level for off.
  delay(LCDdelay);
}
void serCommand(){   //a general function to call the command flag for issuing all other commands   
  Serial.write(0xFE);
}

void setup()
{
  pinMode(txPin, OUTPUT);
  LCD.begin(9600);
  clearLCD();
  goTo(0,0);
  LCD.print("Test String");
}

void loop()
{
}


This now compiles and uploads, but theres clearly something wrong with my changes because it doesn't clear the display and goTo(0,0); doesnt work, however the "Test String" text is displayed.

Any ideas please?

Thanks in advice :)

PaulS

Why are you writing to the serial port, and expecting the LCD to react, when it is not connected to the serial port?

ChrisLong

I modified this code:

Code: [Select]
#include <SoftwareSerial.h>

#define txPin 2

SoftwareSerial LCD = SoftwareSerial(0, txPin);
// since the LCD does not send data back to the Arduino, we should only define the txPin
const int LCDdelay=10;  // conservative, 2 actually works

// wbp: goto with row & column
void goTo(int row, int col) {
  LCD.print(0xFE, BYTE);   //command flag
  LCD.print((col + row*64 + 128), BYTE);    //position
  delay(LCDdelay);
}
void clearLCD(){
  LCD.print(0xFE, BYTE);   //command flag
  LCD.print(0x01, BYTE);   //clear command.
  delay(LCDdelay);
}
void backlightOn() {  //turns on the backlight
  LCD.print(0x7C, BYTE);   //command flag for backlight stuff
  LCD.print(157, BYTE);    //light level.
  delay(LCDdelay);
}
void backlightOff(){  //turns off the backlight
  LCD.print(0x7C, BYTE);   //command flag for backlight stuff
  LCD.print(128, BYTE);     //light level for off.
   delay(LCDdelay);
}
void serCommand(){   //a general function to call the command flag for issuing all other commands   
  LCD.print(0xFE, BYTE);
}

void setup()
{
  pinMode(txPin, OUTPUT);
  LCD.begin(9600);
  clearLCD();
  goTo(0,0);
  LCD.print("Hello world!");
}

void loop()
{
}


Which I found on this page: http://www.arduino.cc/playground/Learning/SparkFunSerLCD

PaulS

So, all the Serial.write()s should be LCD.write()s.

ChrisLong

That just produces an "'LCD' was not declared in this scope." error.

Before changing that the code was making the screen display the text but the "control codes" for the LCD weren't working correctly.

Go Up