jzl:
Anything specific I should look for in the datasheet?
It's NOT a predecessor. Look like you didn't even read the introduction...
The PCF8574 and PCF8574A are identical, except for the different fixed portion of the slave address.
So if you did change the address to some magic other address (and that's really the address of the A version) it should just work. Unless the library does not support the address (but that would be veeeeeerrryyy weird of the library to limit the addresses and it seems to just use any address you pass) or you didn't connect it right.
For an I2C LCD display to work, the I2C address and the I2C backpack to LCD pin mapping must be correct. If the library default settings for either or both are not correct the LCD will not work. You can try to figure out the right pin mapping and use an I2C scanner to find the address, but if you install and use the hd44780 library that is done automatically by the library.
Install the hd44780 library. The hd44780 library is the best available for I2C LCDs. The library is available in the Library Manager. Go to Library Manager (in the IDE, Sketch, Include Libraries, Manage Libraries) and in the Topics dropdown choose Display and in the Filter your search box enter hd44780. Select and install the hd44780 library by Bill Perry.
The class that you want to use is the hd44780_I2Cexp class. There are examples to show how to use the library. The nice thing about the hd44780 library is that it will autodetect the I2C address and the I2C backpack to LCD pin mapping.
In the examples, there is a diagnostic sketch that will help us to help you if you still have trouble with the display. Run the diagnostic sketch and post the results.
septillion:
So if you did change the address to some magic other address (and that's really the address of the A version) it should just work.
This is far from being correct.
Even when the i2c address is correct, there is no guarantee that "it should just work" since the library must also know how the PCF8574 i/o expander chip is wired up to the LCD module and not all backpacks use the same wiring/pin mapping.
That is why newLiquidCrystal LiquidCyrstal_I2C i/o class has pin mapping information in the constructor.
The pin mapping information in the constructor is how the user tells the library how the i/o expander chip is wired up to the LCD module.
Get that incorrect and it will not work. While it is not difficult to come up with the correct pin mapping information, many people struggle with it as they lack the technical skills to do it.
This is main reason I created the hd44780 library with the hd44780_I2Cexp i/o class.
When using the hd44780_I2Cexp i/o class, it should "just work" as the library will auto locate the i2c address and then auto detect the pin wiring used between the PCF8574 and the LCD module.
The library also includes a diagnostic sketch, I2CexpDiag, which should be run first to verify that all the s/w and h/w are properly functioning.
bperrybap:
This is far from being correct.
Even when the i2c address is correct, there is no guarantee that "it should just work" since the library must also know how the PCF8574 i/o expander chip is wired up to the LCD module and not all backpacks use the same wiring/pin mapping.
True, I did assume the same wiring. (S)He didn't write about backpacks so at most I expected a "straight" module aka (s)he has control over the connections.
If you can't guarantee the connections are the same of curse all beds or off.
But granted, I like your library Besides the great functions it luckily doesn't use the fricking LiquidCrystal name because that library is just cloned TO MUCH under the same name...
bperrybap:
Even when the i2c address is correct, there is no guarantee that "it should just work" since the library must also know how the PCF8574 i/o expander chip is wired up to the LCD module and not all backpacks use the same wiring/pin mapping.
By examining at the traces on the backpack PCB to see which Px pin on the PCF8574 connects to which LCD module pin and then looking at the Px pin that connects to a transistor to see if that transistor is active high or active low typically from using either an NPN or PNP transistor.
septillion:
Besides the great functions it luckily doesn't use the fricking LiquidCrystal name because that library is just cloned TO MUCH under the same name...
If you are going to use that library, I would recommend using the full constructor. i.e.
lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, HIGH);
While you may have seen setBackLight(pin, level) in examples you found out on the internet, it is an obsolete method and has been for many years.
The preferred way to configure backlight control with that library is by using the full constructor.
When done that way, the backlight will be on when begin() returns.
setbacklight(dimlevel) doe not take a HIGH or LOW as an argument.
It takes a dimlevel value 0-255 to set brightness. Using HIGH (dimvalue of 1) happens to work with the LiquidCrystal_I2C i/o class as i2c backpack h/w does not support dimming so any dimvalue over 0 will turn the backlight on with full intensity.
If you did that with some other i/o class and h/w you could end up with a very dim backlight.
I'm still curious why you decided not to use the hd44780 library.
jzl:
2. The examples on the recommended library seemed too much to navigate through (menus within menus) and I'm too lazy to read haha
Likely, you spent more time reading that web page and probing the backpack than the few minutes it would have taken to read about the hd44780 library and the hd44780_I2Cexp i/o class which auto detects everything for you....