Подключение клавиатуры

К Arduino легко можно подключить клавиатуру. И не самодельную, сделанную в виде матрицы кнопок, а полноценную, от ПК.
Для этого необходимо сделать следующее:
1) Рассмотреть разъемы;
2) Сделать переходник или шлейф;
3) Разобраться с библиотекой для работы с клавиатурой;
Схема подключения клавиатуры выглядит следующим образом:
Разъем АТ:
Разъем PS/2:
Расположение контактов на разъеме кабеля клавиатуры:
Сигнал AT PS/2
KB Clock 1 5
KB — Data 2 1
KB — Reset 3 — GND 4 3
+ 5V 5 4
«Железная» часть у нас готова. Ттеперь нужно научить МК понимать сигналы клавиатуры для этого подключаем библиотеку клавиатуры:
#include //Библиотека клавиатуры
#define KBD_CLK_PIN 3 //указываем порты подключения клавиатуры.
#define KBD_DATA_PIN 4//
PS2Keyboard keyboard; // включения использования функций клавиатуры
void setup() {
keyboard.begin(KBD_DATA_PIN); // указываем библиотеке какие порты используем для подключения клавиатуры.
Serial.begin(9600); //включения уарта
delay(1000); // ждем 1 секунду
}
Теперь непосредственно тестовая программа:
#include //Библиотека клавиатуры
#define KBD_CLK_PIN 3 // указываем порты подключения клавиатуры.
#define KBD_DATA_PIN 4// указываем порты подключения клавиатуры.
PS2Keyboard keyboard; // включения использования функций клавиатуры
void setup() {
keyboard.begin(KBD_DATA_PIN); // указываем библиотеке какие порты используем для подключения клавиатуры.
Serial.begin(9600); //включения уарта
delay(1000); // ждем 1 секунду
}
#define is_printable© (!(c&0x80)) // не выводим стоповые биты на терминал
void loop() { //главный цикл
if(keyboard.available()) {
byte extra = keyboard.read_extra();//
чтение данных клавиатуры.
byte c = keyboard.read(); //
boolean ctrl = extra & 1; // проверка наличие нажатого <ctrl> занимающего нулевой бит
boolean alt = extra & 2; // проверка наличие нажатого <alt> занимающего первый бит
if (ctrl) Serial.print('^'); // выводим символ
if (alt) Serial.print('_');// выводим символ // проверка нажатых специализированных клавиш и вывод соответствующих сообшений на терминал
if (c==PS2_KC_UP) Serial.print("up\n");
else if (c==PS2_KC_DOWN) Serial.print("down\n");
else if (c==PS2_KC_BKSP) Serial.print("backspace\n");
else if (c==PS2_KC_ESC) { Serial.print("escape and reset\n"); keyboard.reset(); }
else if ( is_printable© ) Serial.print©; // вывод непосредственой буквы или цифры
}
}
комментарии(0)
Комментировать