Отображение информации на 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-ю строку дисплея
}
}
}