Here's my code:

#include <LiquidCrystal.h>
int rs = 11;
int rw = 10;
int en = 9;
int d0 = 1;
int d1 = 2;
int d2 = 3;
int d3 = 4;
int d4 = 5;
int d5 = 6;
int d6 = 7;
int d7 = 8;
LiquidCrystal lcd(rs, rw, en, d0, d1, d2, d3, d4, d5, d6, d7);

void setup() {
  // put your setup code here, to run once:
  lcd.begin(16, 2);

void loop() {


And here's the output: enter image description here

Also note the first line of text starts in the second column. I've tried with a different LCD and the same issue occurs. It seems to go one character further in ascii (ex: the '.'s become '/') if that's any clue to what's going on. In a separate program (exact same setup) I can print "Hello World" on the first line no problem. Anyone know why it's doing this and how to fix it? Thanks

  • 3
    Looks like it gets one or two least significant bits wrong. So check wiring and so
    – KIIV
    Commented Jun 4, 2021 at 6:58
  • 2
    Btw, Arduino pins 0 and 1 are wired to USB serial (on many boards) - so you can try it without Serial.begin and if it works, just move pin(s) to not use arduino pin 1
    – KIIV
    Commented Jun 4, 2021 at 7:52

1 Answer 1


Your Least Significant Bit is always 1 (Check the ASCII table to see this). You might have a problem with your wiring, double check the pin you use and that the continuity is good.

Also, as KIIV said in comment, depending on the board you use, you might have a conflict with the serial port (Which pull the line high when not transmitting, explaining the result you get). Try moving pin 1 to another one.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.