Greetings all!
I'm attempting to connect a 16x2 RGB LCD (from Adafruit) to my Arduino Uno using an MCP23017 I2C port expander. I think I've got the wiring correct, and I'm trying to use the LiquidCrystal_I2C library from F Malpartida, but I'm running into some roadblocks. I'm able to get the LCD to light up, contrast pot to work, and I can see the MCP23017 if I use the I2C scanner sketch, so I think I've got all of that correct. However, I modified the "hello world" I2C sketch that came with the LiquidCrystal_I2C library to match the correct address for the port expander and the pins for the LCD, but no dice. I'm hoping someone can take a look at my wiring diagram and my sketch and maybe give me an idea of what I'm doing wrong.
Here's the wiring schematic:
And here's the sketch:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 13
//LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address
LiquidCrystal_I2C lcd(
0x20, // address (found with I2C scanner)
4, // E(nable)
5, // R/W
6, // RS (Reset)
3, // D4
2, // D5
1, // D6
0, // D7
7, // Backlight (just put this in)
NEGATIVE); // Backlight Polarity
// Creat a set of new characters
const uint8_t charBitmap[][8] = {
{ 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
{ 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
{ 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
{ 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
{ 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
{ 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
{ 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
{ 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
};
void setup()
{
int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));
// Switch on the backlight
pinMode ( BACKLIGHT_PIN, OUTPUT );
digitalWrite ( BACKLIGHT_PIN, HIGH );
lcd.begin(16,2); // initialize the lcd
for ( int i = 0; i < charBitmapSize; i++ )
{
lcd.createChar ( i, (uint8_t *)charBitmap[i] );
}
lcd.home (); // go home
lcd.print("Hello, ARDUINO ");
lcd.setCursor ( 0, 1 ); // go to the next line
lcd.print (" FORUM - fm ");
delay ( 1000 );
}
void loop()
{
lcd.home ();
// Do a little animation by writing to the same location
for ( int i = 0; i < 2; i++ )
{
for ( int j = 0; j < 16; j++ )
{
lcd.print (char(random(7)));
}
lcd.setCursor ( 0, 1 );
}
delay (200);
}