Cant get grove white on blue lcd to work

Good day,
I am trying to use a Grove white on blue LCD but no matter what i try it doesnt work.

The setup is:
Arduino uno rev2 wifi
Grove base shield
Grove-16x2 LCD (White on blue) V2.0

I connect the LCD in the I2C port but no matter what all that it shows is a line of black blocks.
Ive tried multiple libraries/tutorials such as:

Can somebody help?

Post the code you are using. I've looked at some sample code for this device and can't see where the I2C is defined. (apparently it is 0x3E and is presumably embedded in a library),

This is what ive got just the code from the tutorial

/*************************************************************************
 * 
 * Interfacing Arduino with Seeed Studio Grove LCD (I2C 16x2 LCD).
 * This is a free software with NO WARRANTY.
 * https://simple-circuit.com/
 *
 ************************************************************************/

#include <Wire.h>     // include Arduino Wire library
#include "rgb_lcd.h"  // include Seeed Studio LCD library

rgb_lcd lcd;  // initialize LCD library

void setup() {
  // initialize the LCD with 16 columns and 2 rows:
  lcd.begin(16, 2);

  // move cursor to upper left position (0, 0)
  lcd.setCursor(0, 0);

  // print text on the LCD
  lcd.print("Hello, world!");

  char txt[] = "Seeed Studio 16x2 LCD White on Blue \0";

  lcd.setCursor(0, 1);  // move cursor to second row
  lcd.print(txt);       // print text array
  delay(1000);          // wait a second

  while(txt[0] != '\0')
  {
    byte i = 0;
    lcd.setCursor(0, 1);
    while(txt[i] != '\0') // shift the text array to the left by 1 position
    {
      lcd.write(txt[i]);  // print one character
      txt[i] = txt[i+1];  // shift the text array to the left
      i++;
    }

    lcd.write(' ');  // print a space
    delay(200);      // wait 200 milliseconds
  }

  delay(1000);    // wait a second
}

// main loop
void loop() {
  lcd.setCursor(0, 1);  // move cursor to position (0, 1)

  // print number of seconds since the lase reset
  lcd.print( millis()/1000 );

  delay(200);      // wait 200 milliseconds
}

// end of example code.

Maybe try the I2C scanner from here to see what address it finds. Arduino Playground - I2cScanner

EDIT
I also found this at Grove - 16x2 LCD - Seeed Wiki

The first version of Grove - 16 x 2 LCD series does not have a built-in pull-up resistor, nor does it provide a pad to solder the optional pull-up resistor. We have redesigned the module, and the new version has built-in pull-up resistors.

If you have an older version on your hand, you can solder a 10kΩ DIP resistor yourself on the back pad of the Grove connector. Please follow the picture below, solder a 10kΩ DIP resistor between VCC and SCL pins and a 10kΩ DIP resistor between VCC and SDA pins.

Scanning...
Unknown error at address 0x3E
I2C device found at address 0x60  !
done

The LCD is V2.0

Well, it certainly found something at 0x3E so it looks like the address is the one expected. I'm not sure about the significance of that error though. It looks like the library uses this "error" code to determine which rgb chip model it is talking to.

    // check rgb chip model
    _wire->beginTransmission(RGB_ADDRESS_V5);
    if (_wire->endTransmission () == 0)
    {
        rgb_chip_addr = RGB_ADDRESS_V5;
        setReg(0x00, 0x07); // reset the chip
        delayMicroseconds(200); // wait 200 us to complete
        setReg(0x04, 0x15); // set all led always on
    }
    else
    {
        rgb_chip_addr = RGB_ADDRESS;
        // backlight init
        setReg(REG_MODE1, 0);
        // set LEDs controllable by both PWM and GRPPWM registers
        setReg(REG_OUTPUT, 0xFF);
        // set MODE2 values
        // 0010 0000 -> 0x20  (DMBLNK to 1, ie blinky mode)
        setReg(REG_MODE2, 0x20);
    }

Do you know what is at address 0x60, which it also found ?

Are you using a normal Arduino Uno (ATmega328p) ?

Anyway, if there is something else on the I2C bus, the chances are the pullup resistors are not an issue.

Normal LCD displays have a contrast potentiometer to adjust. Here there is none so I guess the contrast is set by other means.

In my begin post i wrote the specifics of the hardware i am using.
When i remove the LCD screen only the 0x60 is left even though nothing is connected but its probably the shield thats on the arduino.

EDIT
I removed the shield and tested the IC2 scanner and it still says:

Scanning...
I2C device found at address 0x60  !
done

idk if the problem lies there or if its just a component thats inside my specific Arduino that gives off that device

What Arduino are you using ?

The Arduino uno rev2 wifi

OK. There are a lot of peripherals on that board. Probably it is the IMU sensor which returns a code of 0x60.

There are a number of issues related to I2C (Wire library) on the Arduino Uno WIFI Rev 2. It is not clear to what extent these have been fixed or whether these are relevant to your problem. Your code is particularly vulnerable because it appears to use an error code delivered by Wire to determine which RGB chip model is in use.

Anyway, which Arduino IDE version are you using ? Update it to the newest in the series you are currently using (1.8.19 or 2.0.3)

Switch on compiler warnings in the IDE and add any such output to this thread.

Have you another Arduino you can try it with? Best would be an original type Uno with the ATmega328P chip. You could put the Grove shield on that.

Failing that, have you any other Arduino, say a Nano, and sufficient jumper wires to connect directly the Blue LCD screen to this Arduino's power and I2C pins ?

I am using IDE 2.0.3

Code:

/*************************************************************************
 * 
 * Interfacing Arduino with Seeed Studio Grove LCD (I2C 16x2 LCD).
 * This is a free software with NO WARRANTY.
 * https://simple-circuit.com/
 *
 ************************************************************************/

#include <Wire.h>     // include Arduino Wire library
#include "rgb_lcd.h"  // include Seeed Studio LCD library

rgb_lcd lcd;  // initialize LCD library

void setup() {
  // initialize the LCD with 16 columns and 2 rows:
  lcd.begin(16, 2);

  // move cursor to upper left position (0, 0)
  lcd.setCursor(0, 0);

  // print text on the LCD
  lcd.print("Hello, world!");

  char txt[] = "Seeed Studio 16x2 LCD White on Blue \0";

  lcd.setCursor(0, 1);  // move cursor to second row
  lcd.print(txt);       // print text array
  delay(1000);          // wait a second

  while(txt[0] != '\0')
  {
    byte i = 0;
    lcd.setCursor(0, 1);
    while(txt[i] != '\0') // shift the text array to the left by 1 position
    {
      lcd.write(txt[i]);  // print one character
      txt[i] = txt[i+1];  // shift the text array to the left
      i++;
    }

    lcd.write(' ');  // print a space
    delay(200);      // wait 200 milliseconds
  }

  delay(1000);    // wait a second
}

// main loop
void loop() {
  lcd.setCursor(0, 1);  // move cursor to position (0, 1)

  // print number of seconds since the lase reset
  lcd.print( millis()/1000 );

  delay(200);      // wait 200 milliseconds
}

// end of example code.

Compiler:

C:\Users\maxhb01\Documents\Arduino\libraries\Grove_LCD_RGB_Backlight-master\rgb_lcd.cpp: In member function 'void rgb_lcd::begin(uint8_t, uint8_t, uint8_t, TwoWire&)':
C:\Users\maxhb01\Documents\Arduino\libraries\Grove_LCD_RGB_Backlight-master\rgb_lcd.cpp:63:29: warning: unused parameter 'cols' [-Wunused-parameter]
 void rgb_lcd::begin(uint8_t cols, uint8_t lines, uint8_t dotsize, TwoWire &wire) {
                             ^~~~

Unfortunatly this is the only arduino that i have.
I do have the option of trying it on a normal uno from somebody else possibly on friday.

Those warnings do not appear to be significant.

I did a quick search on your behalf and found this: I2C LCD not working - Grove - Seeed Forum . It is old but does not look like it has been resolved. The last post in the thread does not appear to be relevant.

You may find other, similar problems or join that forum and state your problem.
Trying with a normal Uno sounds like a good idea.

Your topic has been moved to a more suitable location on the forum. Installation and Troubleshooting is not for problems with (nor for advice on) your project.

I would expect that you see 3 "addresses":

0x3E the AIP31068L display driver itself
0x60 or 0x62 for the RGB driver PCA9633
0x03 from the reserved address area - this is also the PCA9633

my Noiasca LCD library supports that kind of displays. See the example 0501_Wire_HelloWorld.

You might need to us use the constructor where you hand over the LCD address and the RGB address.

@

Your other topic on the same subject deleted.

Please do not duplicate your questions as doing so wastes the time and effort of the volunteers trying to help you as they are then answering the same thing in different places.

Please create one topic only for your question and choose the forum category carefully. If you have multiple questions about the same project then please ask your questions in the one topic as the answers to one question provide useful context for the others, and also you won’t have to keep explaining your project repeatedly.

Repeated duplicate posting could result in a temporary or permanent ban from the forum.

Could you take a few moments to Learn How To Use The Forum

It will help you get the best out of the forum in the future.

Thank you.

It is Friday today. Does it look like you are able to perform this test ?

The LCD worked on a different device.
It seems there is just some incompatability with the uno rev2 wifi and the I2C LCD.
I dont have much experience with the arduino so i will just make my project in a different way.
Thanks for the help i suppose this forum post can be considered closed.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.