What I want to do is do scrolling text over two lines! The inbuilt function scrollDisplayLeft() doesn't really do the job and it scrolls the whole panel so I rolled my own function.
Very quickly the code is below:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
String oldContent; //Keep this between usb reads();
void setup(){
lcd.begin();
Serial.begin(9600); // USB is always 12 Mbit/sec
oldContent=""; //Initialise this variable
}
void loop(){
String content = getString(); //Get the USB content
//If there was USB content display it
if (content != ""){
content.concat(" "); //Add another character
oldContent = content;//Save the content
}
//If there is something to display
if (oldContent!=""){
displayMessage(oldContent); //show me!
}else{
//Otherwise check again soon!
delay(250);
}
}
String getString(){
String content = ""; //Set up return variable
char character; //char to read from USB
while(Serial.available()) { //While there is more to read, do more
character = Serial.read(); //Read the char
content.concat(character); //Add it to the return variable
delay (10); //make sure we don't act too quickly and assume it's over before it really is
}
return content;
}
void displayMessage(String message){
if (message!=""){ //Make sure there is something to show
lcd.home(); //Start at row 1
printRows(message,0); //print the message, possibly on 2 rows
delay(2500); //Show the first screen for a while, give people a change to read
for (int posCounter = 0; posCounter < message.length(); posCounter++){ //For all of the chars
printRows(message,posCounter); //print the message, possibly on 2 rows
delay(600);// Wait a bit as the LCD refresh is bad
}
delay(600); // Little extra wait, possibly not needed
}
}
void printRows(String message, int pos){
lcd.clear();//Clear the screen again
lcd.setCursor(0,0); //Got to line 1
lcd.print(message.substring(pos,pos+16)); //Get row 1 and print it
if (message.length() >16){ //Check for a row 2
lcd.setCursor(0, 1); //Set to the second row
lcd.print(message.substring(pos+16,pos+32)); //Print row 2
}
}
Not rocket science but it might help someone.
No comments:
Post a Comment