With that being said, I believe my <LiquidCrystal_I2C.h> library may be alright, but the linking <LiquidCrystal.h> may be incorrect. Is that line of thought correct?
@cptadventure
The code you posted is not written for the LiquidCrystal_I2C library.
It is written for fm's newLiquidCrystal library LiquidCrystal_I2C i/o class.
The LiquidCrystal_I2C library and the newLiquidCrystal library both have LiquidCrystal_I2C.h header files which have LiquidCrystal_I2C classes.
They are two different libraries and they work differently.
If your code is compiling, then you have installed fm's newLiquidCrystal library.
If you also have LiquidCrystal_I2C library installed, the IDE can get confused.
If you have both installed, and you want the one from the newLiquidCrystal library you can add an include to ensure it picks fm's newLiquidCrystal library
Add this line
#include <LCD.h>
just above the include for LiquidCrystal_I2C.h to ensure you get the LiquidCrystal_I2.h header file from the newLIquidCrystal library vs the one from the LiquidCrystal_I2C library.
I would sure like to find libraries that work. I would like the left/right scrolling feature to be available as well.
I would suggest using the hd44780 library as it is currently being maintained.
In terms of left/right scrolling, you may be disappointed as to how this really works. IMO, it really isn't usable unless you have small displays.
see below
The left/right shift is handled by the chip set not the library.
When the sketch calls scrollDisplayLeft() or scrollDisplayRight() the library just sends a DisplayShift instruction indicating which direction to shift.
The library doesn't do anything but send the instruction/command.
The code for these API functions is so simple/minimal it is unlikely that any library would screw it up.
Whether it works as the users expects, well that is another matter.
The way the shift is implemented in the hardware is it shifts where characters are pulled from DDRAM and displayed on the display.
There is 80 and ONLY 80 bytes of DDRAM.
The normal starting location is 0, if a shift left is done the starting location bumps by one, If to the right it decrements by one. location rolls around to location 79
IMO, the shifting capability isn't very useful except on small displays.
Like 1 line displays and MAYBE 2x16 if not shifting very much.
Beyond that I think it isn't all that useful since when the display is larger where more of the 80 bytes (or if all 80 bytes) are shown on the display, characters from one line line will move up/down or jump to other lines.
Combine that with the somewhat unexpected 20x4 memory to display mapping the scrolling is a bit strange.
i.e. a right shift will place the character in col 19, of line 0 down at col 0 line 2
On a small display, it appears that the text is moving left or right with spaces coming in because the spaces that shift in are characters that are out of view.
When the display is larger like 20x4 there are not characters that are how of view, the characters just shift around on the display.
This is why I say it isn't very useful unless the display is small.
@catusme
Which library did you mean when you said "that LCD library"?
newLiquidCrystal?
I had trouble with that LCD library and a 20x4 LCD, both a long time ago and just this week. So I used this library: LiquidCrystal_I2C_Hangul
The LiquidCrystal_I2C_Hangul appears to be based on LiquidCrystal_I2C with a couple of new functions added. i.e. if you don't call the new functions, the library should work the same as the LiquidCrystal_I2C library (the one in the IDE library manager)
Both LiquidCrystal_I2C and LIquidCrystal_I2C_Hangul have issues related cursor positioning on certain display geometries since they harded coded the display offsets for the beginning of each row and the actual offsets are not consistent for all geometries.
The hd44780 library will not have this issue.
--- bill