Uno + Grove Shield + Grove - LCD RGB Backlight not working

Hello,

I am attempting to help one of my students diagnose a problem they are having while trying to use a Grove - LCD RGB Backlight.

Their setup is: Arduino Uno + Grove Base Shield V2.1 + Grove - LCD RGB Backlight V4.0 My setup, which I used for troubleshooting (explained below) is the exact same.

The program they are trying to run is simply to introduce them to the Grove - LCD RGB Backlight and is just supposed to light up and display some text is all.

/* Grove-RGB_LCD.ino
   This code will set the color of the LCD backlight and keep counting
   the seconds since the last reset of the Arduino
*/

#include 
#include "rgb_lcd.h"

rgb_lcd lcd;

//Color code, change it to whatever you want
const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

void setup() {
  // put your setup code here, to run once:
  // set up the number of columns and rows in the LCD
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
  // print a message to the LCD
  lcd.print("Hello World!");
  delay(1000);

}

void loop() {
  // put your main code here, to run repeatedly:
  // set the cursor to the column 0, line 1
  //(note: line 1 is the second row, since counting begins with 0)
  lcd.setCursor(0,1);
  //print the number of seconds since reset:
  lcd.print(millis()/1000);
  delay(100);
}

After the code is uploaded though nothing happens, I'll try to summarize the troubleshooting I've done so far.

  • I uploaded the program to my own setup which is the exact same as theirs (ie Uno + Grove base shield + Grove - LCD RGB Backlight) and it works just fine.
  • I swapped in their LCD panel to my setup and it worked fine so it is not the Grove - LCD RGB Backlight.
  • I swapped in their Grove shield + their LCD panel onto my Arduino Uno and it works fine.
  • I swapped in my Grove shield + my LCD panel onto their Arduino Uno and it does not work.
  • I uploaded a different program to their Uno + Grove + Grove button just to detect if the button is pressed and it works.
  • Reconnected their Uno + Grove Shield + Grove - LCD RGB Backlight and tried all 4 of the I2C connections, reseting the board each time, none of them worked.
  • Grove Shield voltage switch is set to 5V and again works on my Uno.
  • They have done several other example programs with the Uno + Grove Shield such as connecting a button, connecting an LED and a button, connecting a temperature sensor, etc. and all of them worked perfectly fine.
  • There is no noticable damage to anything, no chipped solder, no bent pins, according to them all of it is brand new.

Because the Grove - LCD RGB Backlight is the only item they have used that uses I2C and is not working but yet everything else has worked I have to assume the issue has to do with I2C somewhere in the setup? I've seen a few posts talking about using an I2C diagnostic program but I'm not sure what to look for let alone fix it?

I havn't encountered a problem like this previously so I don't quite know where to go from here and can't seem to find anyone online having a similar issue so any help is appreciated.

is the Uno a R3 version? the Base Shield uses the R3 I2C pinout

Have you tested the I2C pins (A4 & A5)? Set as digital inputs do they respond correctly to a button or other digital stimulus? Connect an LED (with resistor) to each, can you confirm that they output as expected?

Here is the I2C scanner. Use it to confirm the I2C address and communication on the I2C bus.

// I2C scanner by Nick Gammon.  Thanks Nick.

#include 

void setup() {
  Serial.begin (115200); //*****  make sure serial monitor baud matches *****

  // Leonardo: wait for serial port to connect
  while (!Serial) 
    {
    }

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  
  Wire.begin();
  for (byte i = 1; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {}

The Arduino Uno is an R3, I havn't had an opportunity to test the A4 and A5 pins yet nor the I2C scanner. When using the I2C scanner, what am I supposed to look for with it? As in what is expected if it works versus not works?

If the I2C bus is functional you should see the number of I2C devices found and their addresses. If your I2C display is properly connected to the I2C bus, you should see it. If not there is a wiring or component problem.

Here is a scan that found my 1602 I2C display

I2C scanner. Scanning ...
Found address: 63 (0x3F)
Done.
Found 1 device(s).

Here is an unsuccessful scan

I2C scanner. Scanning ...
Done.
Found 0 device(s).

Try the scanner on a system that is known good, first.

edit: It seems that the LCD has one address and the RGB backlight has another. A successful scan should show both.

// Device I2C Arress
#define LCD_ADDRESS     (0x7c>>1)  //  0x3E
#define RGB_ADDRESS     (0xc4>>1)  //  0x62