Skip to content

Instantly share code, notes, and snippets.

@alastairhm
Forked from RC1140/gist:3299197
Last active December 15, 2015 02:19
Show Gist options
  • Save alastairhm/5185969 to your computer and use it in GitHub Desktop.
Save alastairhm/5185969 to your computer and use it in GitHub Desktop.
#include <LiquidCrystal.h>
#include <string.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
char message[] = "This is some long message that will end up scrolling";
int previous = 0;
int pos = 0;
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
//lcd.print(message);
}
void printLine(int refreshSeconds, int lineNum){
//Check if the current second since restart is a mod of refresh seconds ,
//if it is then update the display , it must also not equal the previously
//stored value to prevent duplicate refreshes
if((millis()/1000) % refreshSeconds == 0 && previous != (millis()/1000)){
previous = (millis()/1000);//Store the current time we entered for comparison on the next cycle
lcd.setCursor(0, lineNum);//Set our draw position , set second param to 0 to use the top line
char lcdTop[16];//Create a char array to store the text for the line
int copySize = 16; // What is the size of our screen , this could probably be moved outside the loop but its more dynamic like this
if(strlen(message) < copySize)
{
//if the message is bigger than the current buffer use its length instead;
copySize = strlen(message);
}
//Store the current position temporarily and invert its sign if its negative since we are going in reverse
int tempPos = pos;
if(tempPos < 0)
{
tempPos = -(tempPos);
}
//Build the lcd text by copying the required text out of our template message variable
memcpy(&lcdTop[0],&message[tempPos],copySize);
lcd.print(lcdTop);//Print it from position 0
//Increase the current position and check if the position + 16 (screen size) would be larger than the message length , if it is go in reverse by inverting the sign.
pos += 1;
if(pos +copySize >= strlen(message))
{
pos = -(pos);
}
}
}
void loop() {
printLine(1,1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment