LCD случайным образом идет на один символ дальше в таблице ascii

lcd

Вот мой код:

#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);
  Serial.begin(4800);
  lcd.setCursor(0,0);
  lcd.print("Loading...");
  delay(3000);
  lcd.setCursor(1,1);
  lcd.print("waht");
}

void loop() {

}

И вот результат:

Также обратите внимание, что первая строка текста начинается во втором столбце. Я пробовал с другим ЖК-дисплеем, и возникает та же проблема. Кажется, что он идет на один символ дальше в ascii (например,"."становится"/"), если это какой-то ключ к тому, что происходит. В отдельной программе (точно такая же настройка) Я могу напечатать "Hello World" в первой строке без проблем. Кто-нибудь знает, почему он это делает и как это исправить? Спасибо

, 👍1

Обсуждение

Похоже, он ошибается на один или два наименее значимых бита. Так что проверьте проводку и так далее., @KIIV

Кстати, контакты Arduino 0 и 1 подключены к последовательному USB (на многих платах) - так что вы можете попробовать это без Serial.begin, и если это работает, просто переместите PIN(ы), чтобы не использовать pin arduino 1, @KIIV


1 ответ


2

Ваш наименее значимый бит всегда равен 1 (проверьте таблицу ASCII, чтобы увидеть это). Возможно, у вас возникли проблемы с проводкой, дважды проверьте используемый вами контакт и убедитесь, что непрерывность хорошая.

Кроме того, как сказал КИИВ в комментарии, в зависимости от используемой платы у вас может возникнуть конфликт с последовательным портом (который тянет линию высоко, когда не передает, объясняя полученный результат). Попробуйте переместить штифт 1 на другой.

,