It is faster than the one in the library manager.
Using IDE 1.6.10
This library transfers a character to the display in 1096us vs the one in the library manager transfers a character in 1458us.
One big issue will be backward compatibility with the existing LiquidCrystal_I2C. This library uses the same name but does not use the same API as the other LiquidCrystal_I2C library.
In particular, init() and setbacklight() are missing and the constructors are different.
This will add to the already existing confusion over the "LiquidCrystal_I2C" library.
floresta:
I'm curious . . . in the initialization routine why do you call the first four function set instructions 'attempts'?
Technically, the first 3 commands are "attempts".
As they are all attempting to put the display back into 8 bit mode.
Depending on the state of the LCD when the sequence begins, it might take 1, 2, or 3 "goto to 8 bit mode" commands or "attempts" to reliably get the display back into 8 bit mode. If the first succeeds the other 2 wouldn't be necessary. If the second command succeeds, then the 3rd wouldn't be necessary. But if the lcd is in 4 bit mode and has already received the first nibble, prior to that 3 command sequence starting, then all 3 commands are necessary to put the lcd back into 8 bit mode.
The problem is that since there is no way to know the state of the LCD when the command sequence is started, the code must always do all 3 command "attempts" to reliably get the display back into 8 bit mode so that it can then put the display into 4 bit mode which assures 4 bit nibble sync between the host and the LCD.
But the 4th command / "attempt" for sure is not an "attempt" at all. That command is putting the display into 4 bit mode, knowing that the display is guaranteed to be in 8 bit mode from the prior 3 commands, prior to this "goto 4 bit mode" command being issued.
This command is pretty much guaranteed to work, and when complete the LCD is in 4 bit mode and the host and the LCD are in nibble sync.
It is encouraging to see that you actually followed the data sheet flowchart and turned the display off after the function set and then remembered to turn it back on again after the initialization is complete. Not everyone thinks this two step procedure is necessary but it only takes one extra instruction to do things as recommended.
I'm one of those that does not believe that is necessary.
My view is that all it does is turn off the display during some of programming which tries to ensure that the display doesn't momentarily go pixel whacky while it is being re-programmed from things like font size or rows changing before the display is finally cleared.
--- bill