Официальный сайт компании Arduino по адресу arduino.cc
подключение PS2 клавиатуры
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 22/08/2019 - 21:07
Доброго времени суток, уважаемые форумчане.
Подключила клавиатуру PS2 к ардуино, загрузила библиотеку PS2Keyboard
Подскажите, пожалуйста, в скетче работают только PS2_ENTER, PS2_DELETE, PS2_PAGEUP, PS2_PAGEDOWN.
PS2_HOME, PS2_END, PS2_INSERT не работают. В чем может быть причина?
#include <PS2Keyboard.h> #include "Keyboard.h" const int DataPin = 2; const int IRQpin = 3; PS2Keyboard keyboard; void setup() { delay(1000); keyboard.begin(DataPin, IRQpin); Serial.begin(9600); } void loop() { if (keyboard.available()) { // read the next key char c = keyboard.read(); // check for some of the special keys if (c == PS2_ENTER) { Keyboard.write('E'); delay(10); Keyboard.releaseAll(); } if (c == PS2_PAGEUP) { Keyboard.write('U'); delay(10); Keyboard.releaseAll(); } if (c == PS2_PAGEDOWN) { Keyboard.write('P'); delay(100); Keyboard.releaseAll(); } if (c == PS2_HOME) { Keyboard.write('H'); delay(100); Keyboard.releaseAll(); } if (c == PS2_END) { Keyboard.write('G'); delay(100); Keyboard.releaseAll(); } if (c == PS2_INSERT) { Keyboard.write('T'); delay(100); Keyboard.releaseAll(); } if (c == PS2_DELETE) { Keyboard.write('D'); delay(10); Keyboard.releaseAll(); } } }
Добавте в 22 строку
Serial.println(c);
И посмотрите что вообще с клавиатуры приходит.
Добавте в 22 строку
Serial.println(c);
И посмотрите что вообще с клавиатуры приходит.
С Enter, Delete, PageUp, PageDown приходят значения E, D, U, P
С Insert, End, Home ничего не приходит, ардуино при их нажатии не моргает
Надеюсь клавиатурными светодиодами вам не надо играться?
Надеюсь клавиатурными светодиодами вам не надо играться?
Не надо
Сделайте то что я сказал и сами увидете. По Еnter, например, должно будет печататься 13
Похоже PS2_HOME, PS2_END, PS2_INSERT не поддерживаются.
PS2Keyboard.h
Смотрите файл PS2Keyboard.h. Там комментарий есть - часть "специальных" клавиш по умолчанию игнорируется. Их, я так понимаю, задать нужно.
Смотрите файл PS2Keyboard.h. Там комментарий есть - часть "специальных" клавиш по умолчанию игнорируется. Их, я так понимаю, задать нужно.
Каким образом это можно сделать? Есть пример?
Каким образом это можно сделать? Есть пример?
Добавте в 22 строку
Serial.println(c);
И посмотрите что вообще с клавиатуры приходит.
Сразу станет ясно какие коды генерируются для PS2_HOME, PS2_END, PS2_INSERT. И генерируются ли вообще.
Каким образом это можно сделать? Есть пример?
Добавте в 22 строку
Serial.println(c);
И посмотрите что вообще с клавиатуры приходит.
Сразу станет ясно какие коды генерируются для PS2_HOME, PS2_END, PS2_INSERT. И генерируются ли вообще.
Serial.println(c);
В 22 строчку добавили?
Добавте в 22 строку
Serial.println(c);
И посмотрите что вообще с клавиатуры приходит.
С Enter, Delete, PageUp, PageDown приходят значения E, D, U, P
С Insert, End, Home ничего не приходит, ардуино при их нажатии не моргает
Добавила, они как-будто отключены
Посмотрел код библиотеки. Надо просто в PS2Keyboard.h прописать для этих клавишь значения отличные от 0. В принципе любые, главное что бы с другими клавишами не совпадали.
Посмотрел код библиотеки. Надо просто в PS2Keyboard.h прописать для этих клавишь значения отличные от 0. В принципе любые, главное что бы с другими клавишами не совпадали.
asam, подскажите, пожалуйста, как редактировать файл PSKeyboard.h? В какой программе?
asam, подскажите, пожалуйста, как редактировать файл PSKeyboard.h? В какой программе?
Это просто текстовый файл и его можно редактировать в любом текстовом редакторе. Хоть в ардуино IDE, хоть в notepad/wordpad/word etc.
kalapanga, asam, большое спасибо. Отредактировала PS2_INSERT, PS2_END, PS2_HOME, PS2_SCROLL. Коды подключились, работают. Но не нашла где в файле PSKeyboard.h кнопки PrtSc, PauseBreak, NumLock. Подскажите пожалуйста, где их найти и подключить.
Надо лезть в PS2Keyboard.cpp и редактировать PS2Keymap_US.
Надо лезть в PS2Keyboard.cpp и редактировать PS2Keymap_US.
Залезла в этот файл, пыталась разными способами NumLock подключить, не получилось(
Залезла в этот файл, пыталась разными способами NumLock подключить, не получилось(
Какими именно?
По идее достаточно в PS2Keymap_US заменить 0 на желаемый код слева от /*NumLock*/
Залезла в этот файл, пыталась разными способами NumLock подключить, не получилось(
Какими именно?
По идее достаточно в PS2Keymap_US заменить 0 на желаемый код слева от /*NumLock*/
asam, так нужно сделать везде, где встречается /*Numlock*/ в этом файле?
Достаточно только в той раскладке что вы пользуйтесь. Если при begin раскладка не указывается, то по умолчанию используется PS2Keymap_US
Достаточно только в той раскладке что вы пользуйтесь. Если при begin раскладка не указывается, то по умолчанию используется PS2Keymap_US
asam, большое спасибо Вам! Получилось подключить и NumLock. Осталась последняя кнопка Print_Screen. Не нахожу ее в файлах PS2Keyboard.h, PS2Keyboard.cpp
В PS2Keyboard.cpp находишь функцию static char get_iso8859_code(void). После строки if (!s) return 0; добавляешь Serial.println(s);
Жмешь на клаве Print_Screen и смотришь в сериал мониторе какому числу это соответсвует. Это число будет номером позиции кода Print_Screen в таблице PS2Keymap_US. Вставляешь в ту позицию (там должен быть сейчас 0) тот код который ты хочешь что бы возвращался при нажатии Print_Screen. Учти что нумерация в таблице начинается с 0. Не забудь потом удалить Serial.println(s);
Всё становится веселее, когда ещё нужно зажигать индикаторы - NUM, CAPS, SCROLL. А без этого как то несерьёзно.)
В PS2Keyboard.cpp находишь функцию static char get_iso8859_code(void). После строки if (!s) return 0; добавляешь Serial.println(s);
Жмешь на клаве Print_Screen и смотришь в сериал мониторе какому числу это соответсвует. Это число будет номером позиции кода Print_Screen в таблице PS2Keymap_US. Вставляешь в ту позицию (там должен быть сейчас 0) тот код который ты хочешь что бы возвращался при нажатии Print_Screen. Учти что нумерация в таблице начинается с 0. Не забудь потом удалить Serial.println(s);
Все так сделала. В сериал мониторе при нажатии Print_Screen выводит:
224
18
224
124
224
240
124
224
240
18
Получается 224 позиция?
А в таблице PS2Keymap_US всего 131 позиция...
asam, подскажите, пожалуйста, как включить PS2_PRNT_SCRN
Попробуй так:
В PS2Keyboard.h добавь
#define PS2_PRNT_SCRN 14
В PS2Keyboard.cpp после
case 0x74: c = PS2_RIGHTARROW; break;
добавь
case 0x7С: c = PS2_PRNT_SCRN; break;
asam, спасибо Вам огромное! Все работает)
На здоровье! :)
Luckoste, подскажите, какие строки Вы прописали в файлах PS2Keyboard.h и PS2Keyboard.cpp, чтобы заработал NumLock. Будьте так добры!
В коде Ардуино пишу:
if (c == PS2_NUMLOCK) {
Keyboard.write('N');
delay(10);
Keyboard.releaseAll();
}
В PS2Keyboard.h добавил:
#define PS2_NUMLOCK 144
В PS2Keyboard.cpp, в массиве PS2Keymap_US:
, 144 /*NumLock*/,
Что делаю не так?
Luckoste, подскажите, какие строки Вы прописали в файлах PS2Keyboard.h и PS2Keyboard.cpp, чтобы заработал NumLock. Будьте так добры!
В коде Ардуино пишу:
if (c == PS2_NUMLOCK) {
Keyboard.write('N');
delay(10);
Keyboard.releaseAll();
}
В PS2Keyboard.h добавил:
#define PS2_NUMLOCK 144
В PS2Keyboard.cpp, в массиве PS2Keymap_US:
, 144 /*NumLock*/,
Что делаю не так?
Попробуйте в PS2Keyboard.h добавить:
#define PS2_NUMLOCK 8
Проверьте в текстовом редакторе CTRL+F не используется ли у вас значение 8 для другой клавиши.
В PS2Keyboard.cpp в PS2Keymap_US добавить:
, 8 /*NUMLOCK*/ ,
Более точно смогу ответить 3.10, как доберусь до компа:)
Luckoste, большое спасибо, всё получилось. Взял только не 8, а 12 (8 была уже занята)
Уважаемый asam и знатоки подключения клавиатур! Может Вы поможете в моем вопросе? Заранее благодарю.
http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-usb-klaviatury-kak-ps2-ustroistva