Отображение информации на LCD (20х4) дисплее, введённой PS/2 клавиатурой.

Нет ответов
fot
Offline
Зарегистрирован: 23.10.2011

 При вводе символов посредством  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-ю строку дисплея
    }
   }
  }