ЖК-дисплей, отображающий странный текст

Я делаю проект, который требует, чтобы ввод с клавиатуры отображался на ЖК-дисплее.

lcd.print() отображается в правильном виде, но когда я нажимаю символы на клавиатуре, они заменяются странными символами.

Мы будем признательны за любую помощь.

Вот код:

void setup()
{
  Serial.begin(9600);
  Serial.println("LCD test with PWM contrast adjustment");
  pinMode(13,OUTPUT);
  analogWrite(6,Contrast);

  lcd.begin(16,2);

  pinMode(buzzer, OUTPUT);
  lcd.print(" Electronic ");
  Serial.print(" Electronic ");
  lcd.setCursor(0,1);
  lcd.print(" Keypad Lock ");
  Serial.print(" Keypad Lock ");
  delay(2000);
  lcd.clear();
  lcd.print("Enter Ur Passkey:");
  Serial.println("Enter Ur Passkey:");
  lcd.setCursor(1,0);
  for(int j=0;j<4;j++)
    EEPROM.write(j, j+49);
  for(int j=0;j<4;j++)
    pass[j]=EEPROM.read(j);
}

, 👍0

Обсуждение

Итак, где в вашем коде вы работаете с клавиатурой? Я не вижу ни одной строки, которая имела бы какое-либо отношение к клавиатуре., @AnT


2 ответа


0

Я думаю, вам следует использовать 48 вместо 49.

48 — это символ ASCII, равный 0. Если к нему добавить число от 0 до 9, вы получите символы ASCII от «0» до «9».

(и небольшое примечание: Enter Ur Passkey: содержит более 16 символов; также более «профессионально» не создавать сленговые тексты, чтобы попытаться подогнать его, почему бы не использовать Enter Пароль: вместо этого?

,

1

придерживайтесь одного типа переменных, чтобы избежать путаницы

Итак, если вы придерживаетесь байтового (uint8_t) типа клавиатуры:

uint8_t keys[4][3] = {
  {1,2,3},
  {4,5,6},
  {7,8,9},
  {0xF,0xA,0xB}                 // F-*  B-#
}

затем вы можете сохранить его в EEPROM как байт и прочитать как байт. Это предотвратит путаницу. ваш код, который вы не показываете (здесь каждый может написать один из них быстрее, чем скачать его отсюда) уже переводит числа в числа, а затем вы выращиваете их в символы с более высоким значением

,