Отображение ввода с клавиатуры на ЖК-экране с помощью Arduino - PullRequest
0 голосов
/ 29 мая 2020

Я хочу, чтобы код Arduino отображал вывод в следующем формате на ЖК-дисплее

Если пользователь нажимает «A», 1, 2, 3 на клавиатуре, на ЖК-дисплее должно отображаться Hi: 1,2, 3,

Это то, что я пробовал, но я не могу найти способ собрать код, так как я новичок в Arduino

#include <Keypad.h>
#include <LiquidCrystal.h>


const byte numRows= 4;
const byte numCols= 4;

char keymap[numRows][numCols]= {
    {'1', '2', '3', 'A'},
    {'4', '5', '6', 'B'},
    {'7', '8', '9', 'C'},
    {'*', '0', '#', 'D'}
};

byte rowPins[numRows] = {9,8,7,6};      // Pin Assign
byte colPins[numCols] = {5,4,3,2};      // Pin Assign

Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

// LCD
//                RS E  D4 D5 D6 D7
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);   // Pin Assign


void setup()
{   
    lcd.begin(16, 2);       
    lcd.clear();
    lcd.print("PUSH ANY KEY! ");
    lcd.cursor();
    lcd.blink();
}


void loop(){
    char keypressed = myKeypad.getKey();
    if (keypressed != NO_KEY){
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print(keypressed);
        lcd.print(':');
        lcd.setCursor(3, 0);

    }

}

1 Ответ

0 голосов
/ 29 мая 2020

Возможно, вам потребуется создать конечный автомат, где изменение состояния происходит, когда вы получаете 'A' char. Итак, пока вы не получили символ 'A', ваш конечный автомат продолжает находиться в режиме ожидания (while (keypressed != 'A')).

После получения 'A' вы собираетесь проверить следующий Получено 3 символа и проверьте, соответствуют ли они ожидаемому ('1', '2', '3').

Если вы получите его в любом другом порядке, то l oop сломается, и при выписке if (i == 4) проверка не проходит. Другими словами, как только вы получите число, которое вы не ожидаете, l oop прерывается и проверка не выполняется.

Вот что вы можете добавить в свой код loop():

void loop() {
  char expected[3] = { '1', '2', '3' };
  int i = 0;
  char keypressed = myKeypad.getKey();
  while (keypressed != 'A')
    ;

  while (i < 4) {
    for (i = 0; i < 4; i++) {
      if (keypressed != expected[i])
        break;
  }

  if (i == 4)
    lcd.print("Hi:1,2,3");
}
...