Отображение информации на LCD (20х4) дисплее, введённой PS/2 клавиатурой.
- Войдите на сайт для отправки комментариев
При вводе символов посредством PS/2 Клавиатуры, в примере из последней библиотеки PS/2Keyboard.h(Version 2.3 (October 2011)) и выводе на LCD дисплей 20x4 во 2-ю, 3-ю или 4-ю строку, с использованием оператора " lcd.setCursor(0,3); ", символы выводятся в одно и то же знакоместо. Вывод же символов на 1-ю строку дисплея, после" lcd.clear();" осуществляется последовательно и поочерёдно. (В устройстве же, в первую строку выводятся показания часов).
Как бы обойти это?
Мечталось устанавливать время - дату бортовых часов RTC DS1307 без помощи компьютера с PS/2 клавиатуры, контролируя по LCD команду установки часов - command => "Tххххххххххххх" Set Time/Date.
А ещё, отправлять небольшой однострочный текстовый комментарий с клавиатуры в файл на бортовой SD- Logger из последовательного интерфейса.
Прошу подсказать путь борьбы с LCD и формирования комментария. (Предполагаю, что эти отдельные вопросы могут быть как - то связаны друг с другом).
С уважением ко всем откликнувшимся.
#include <PS2Keyboard.h> #include <LiquidCrystal.h> LiquidCrystal lcd(A8, A9, A10, A11, A12, A13); //LCD дисплей (Mega1280) const int DataPin = 3; //PS/2 - клавиатура const int IRQpin = 2; PS2Keyboard keyboard; void setup() { pinMode(A8, OUTPUT); pinMode(A9, OUTPUT); pinMode(A10, OUTPUT); pinMode(A11, OUTPUT); pinMode(A12, OUTPUT); pinMode(A13, OUTPUT); delay(100); keyboard.begin(DataPin, IRQpin); lcd.begin(20,4); lcd.clear(); Serial.begin(9600); Serial.println("Keyboard Test:"); } void loop() { if (keyboard.available()) { char (c) = keyboard.read(); if (c == PS2_ENTER) { // проверка special keys Serial.println(); } else if (c == PS2_TAB) { Serial.print("[Tab]"); } else if (c == PS2_ESC) { Serial.print("[ESC]"); } else if (c == PS2_PAGEDOWN) { Serial.print("[PgDn]"); } else if (c == PS2_PAGEUP) { Serial.print("[PgUp]"); } else if (c == PS2_LEFTARROW) { Serial.print("[Left]"); } else if (c == PS2_RIGHTARROW) { Serial.print("[Right]"); } else if (c == PS2_UPARROW) { Serial.print("[Up]"); } else if (c == PS2_DOWNARROW) { Serial.print("[Down]"); } else if (c == PS2_DELETE) { lcd.blink(); // заставляем мигать знак (корректура) lcd.rightToLeft(); // теперь пишем справа налево lcd.print (" "); lcd.leftToRight(); // дальше пишем слева направо Serial.print("_"); } else { Serial.print(c); // lcd.setCursor(0,3); //coment or no coment Вывод в lcd.print (c); //1-ю или 4-ю строку дисплея } } }