Arduino Uno (fake) displays garbage on 16x2 LCD keypad shield

Hi everyone, let me introduce myself I'm Abelardo from Mexico, I got into Arduino because I wanted to run ArcadeHacker_CPS2 software but I'm running into problems, this is the software in case you want to take a look: GitHub - ArcadeHacker/ArcadeHacker_CPS2: Capcom CPS2 security programming

So I bought what I thought was an original Arduino thinking it was an original one but turns out it was fake (had to read the how to spot a counterfeit to figure out). Anyways I'm having trouble with the display, it would only output garbage, let me show you a few screenshots:

This is the ArcadeHacker_CPS2 software running but I've tried different tests and it's showing similar characters. I'm using Arduino IDE version 1.6.13 for linux 32 bits (I'm running Ubuntu), tried 1.8.1 and even 1.0.5, different libraries like NewLiquidCrystal, it would result in most cases in a blank screen, only in 1.6 I can get garbage characters, also I bought another cheap LCD Keypad Shield but I got the same results (I know those are crappy too, but got the same results on both so now I think the problem is the Arduino).

This is the LCD initialization code, one of the LCD shields is DFRobot and the other is off brand, I've checked continuity with a multimeter and all lines are connected to the Arduino:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

What could be the problem? Thanks everyone, this is driving me crazy! I'll for sure pick up a genuine Arduino when I get the chance.

What could be the problem?

There could be three problems:

  1. You are blaming the "fake" arduino when the real problem is you.
  2. the LCD is not wired the way your code thinks it is. Actually, I think this is probably OK.
  3. Your code is a secret, thereby preventing anybody from assisting.

Thank you for your reply, srry about the missing details, let me post the code I'm running, I've switched to the LiquidCrystal Hello World example, the only thing I modified is the lcd constructor parameters so they match my LCD pins:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");

void loop() {
  // set the cursor to 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);

This time I used Arduino 1.8.1 for Linux 32 bits, once the code is uploaded the arduino screen shows nothing, I have to disconnect and reconnect the USB port so it starts running, and this is what comes up, every second instead of getting the seconds one or more characters change, it starts with the left-most visible character by the middle of the screen, after 10 seconds it moves 2 positions to the right:

You need to verify how the LCD is actually wired up to the Arduino pins.
The pin mapping you used is common on LCD keypad shield, but not all lcd keypads wire up their LCD pins to Arduino pins the same way.
Spend a few minutes to verify which LCD pins (RS, E, DB4, DB5, DB6, DB7) are wired to which Arduino pins.
Either do it by looking at the shield or use meter.

--- bill

Thanks for the help, I will recheck with my multimeter where the lines are exactly connected, I hope the issue is there it would be easy to fix

While you are doing your initial troubleshooting it is a good idea to deal with a static display.

Simply remove (comment out) the code from between the brackets in loop() and concentrate on getting "hello, world!" to display on the top line.


Thanks for the help everyone! So finally I grabbed my multimeter to check where everything was wired and sure enough everything was wired as expected, but then it occurred to me to check for shorts and 5, 6 and 7 were shorted >:(

I was about to desolder the headers when I realized the short was in the solder that holds the microcontroller socket, really thin solder lines joined those 3 lines so I scrapped the lines and now it works as expected! So for further reference it's a good idea to check for shorts as well if you're having trouble with your display, especially if it's not a genuine Arduino because the soldering could be subpar.