I recently purchased a very simple, Hitachi HD44780 compatible LCD screen for an Arduino project. It’s a 20x4 I2C display, which apparently is constructed as a combination of 2 two-line display controllers. This wouldn’t really matter except for the fact that when printing strings longer than a single line, they are displayed in a 1324 manner. So if you set your cursor on the first line and print a string 80 characters long, things get weird.
lcd.setCursor(0,0)
lcd.print("11111111111111111111222222222222222222223333333333333333333344444444444444444444");
The display shows the lines in an incorrect order. Here’s what you would see on the display:
11111111111111111111
33333333333333333333
22222222222222222222
44444444444444444444
Fortunately this is easily resolved by writing a custom print function that moves the cursor to the correct line before printing. Here’s the function I was using in my project. The only difference is that this version does not remove leading whitespace.
void print(String s){
lcd.clear();
int currentLine = 0;
int increment = LCD_ROWS;
for (int start = 0; start < s.length() ; start += increment){
if(currentLine < 4){
String line;
if(start + LCD_ROWS > s.length()){
line = s.substring(start);
}else{
line = s.substring(start, start + LCD_ROWS);
}
lcd.setCursor(0,currentLine++);
lcd.print(line);
}
}
delay(100);
}
I’m using this print function in combination with the New LiquidCrystal library by F. Malpartida.