Ардуино и клавиатуры (полный гайд)

FAQ

Как я могу использовать несколько клавиатур?

это класс. Следовательно, для использования нескольких клавиатур вы должны создать объект класса для каждой из них. В примере выше экземпляр класса Keypad keypad был связан с цифровыми выводами 2, 3, 4, 5, 6, 7 и 8. Чтобы добавить клавиатуру, подключенную к цифровым выводам 9, 10, 11, 12, 13, 14, 15 и 16, вы можете создать следующий объект keypad2:

И теперь просто используйте нужные методы любой из клавиатур:

Как я могу использовать ?
В Arduino IDE проследуйте по меню «Файл → Примеры → Keypad → DynamicKeypad». Когда скетч откроется, найдите функцию setup():

Здесь показано, что время устранения дребезга контактов при нажатии кнопки устанавливается равным 250 миллисекунд. Если за это время происходит несколько нажатий на кнопку (что и происходит при дребезге контактов кнопки), то дополнительные нажатия просто игнорируются.

Обзор Iris Keyboard: от эргономики до ништяков

Размером 60% от привычной

  1. Можно просто поставить кнопки. Нюанс в том, что эти клавиши повёрнуты на 90 градусов и смотрят вбок. Это неудобно в случае с изогнутыми клавишами, поэтому я поставил плоские из другого набора.
  2. Верхнюю кнопку нажимать большим пальцем не очень комфортно. Если она вам не нужна, то можно объединить кнопки в одну, но нужно будет добавить стабилизатор. Так кнопка будет хорошо нажиматься в любом месте нажатия. Видимо, это и было причиной поворота обычных кнопок.
  3. А можно вместо верхней кнопки поставить крутилку. Об этом отдельно.

Раскладка

  • запоминаешь курсоры;
  • учишься переключаться на цифры, знаки +=- и т.п.;
  • запоминаешь, где громкость и пауза, следующий трек;
  • меняешь положение модификаторов под шорткаты.

Программирование клавиш

  • запускаем ранее установленную программу MPOSMaster;
  • создаем новый проект, и указываем наш тип оборудования (на данный момент я использую USB версию на 64 копки, купленную все так-же на доске объявлений);
  • мы можем задать любую последовательность или комбинацию символов для 4-х слоев, но не более 42 символов в одном слое (ограничение памяти контроллера);
  • задать макрос можно или вводом с клавиатуры при помощи окна “захвата”, или вставляя коды нажатия, отпускания или клика клавиши вручную. При помощи ручного ввода есть возможность задать комбинации клавиш такого вида Ctrl+Alt+Shift+Win+”x”;
  • также есть возможность в любом месте макроса вставить паузу от 0,1s до 1,6s. Если нужна большая пауза или не стандартная, можно вставлять несколько пауз подряд;
  • мы можем задать звуковой сигнал нажатия: короткий, средний или длинный;
  • мы можем включить “Автоповтор” для клавиши. Если он отключен, макрос выполняется только один раз, вне зависимости от того, как долго мы держим клавишу;

Для чего нужна матричная клавиатура?

Для примера возьмем обычную кнопку. Как вы знаете, это простейшее электромеханическое устройство. Чтобы подключить ее к плате, нужно использовать стягивающий резистор, а также задействовать по одному контакту питания и «земли». Нажатием такой кнопки можно выполнить определенное действие, например можно управлять светодиодом, различными приводами, механизмами и так далее. А что, если нам необходимо подключить несколько кнопок? Тогда придется задействовать больше контактов и большее число проводов, да и без макетной платы уже не обойтись, плюс еще резисторы придется использовать в большем количестве.

Для этого и придумали такую клавиатуру, чтобы упростить подключение большего числа кнопок. Такие устройства встречаются везде — в клавиатурах компьютеров, калькуляторах и так далее.

Подключать ее к плате следует 8 выводами, каждый из них считывает значения с определенных строк и столбцов. Подключать их следует к выводам на панели Digital. Я подключу, например, к выводам от 2 до 9 включительно. Нулевой и первый трогать не желательно, поскольку они предназначены для UART интерфейса (например, для подключения блютуз-модуля). Рациональнее оставить их свободными.

Так выглядит самая простая схема с использованием клавиатуры. Для более удобной работы с ней была написана библиотека Кейпад. Скачать ее, а также другие скетчи можно .

После того, как вы установили в библиотеку, можно зайти в Ардуино IDE (программа с сайта Arduino) и посмотреть примеры скетчей.

Возьмем самый простой скетч для ознакомления. Он позволяет считывать значение с клавиатуры при нажатии определенной клавиши и выводить их в порт. В данном случае это монитор порта на компьютере.

#include // подключаем нашу библиотеку
{«2″,»5″,»8″,»0»},
{«3″,»6″,»9″,»#»},
{«A»,»B»,»C»,»D»}
};
void setup(){
Serial.begin(9600);
}
void loop(){
if (customKey){
Serial.println(customKey);
}
}

Скетч очень простой. Стоит отметить первые строчки кода. Сначала подключаем библиотеку, затем указываем сколько строк и столбцов у клавиатуры, а потом нужно правильно расположить названия клавиш, чтобы было удобнее работать.

Если это сделать неправильно, то, например, при нажатии цифры 4, в порт выйдет цифра 6 или любой другой символ. Это можно определить опытным путем и расположить символы, как они расположены на клавиатуре.

В функции void setup
указываем скорость последовательного соединения с монитором порта 9600 бод
. Функция нужна только для подачи питания на модули. В функции Void Loop
прописываем условие. Переменная Char
используется для хранения только одного символа, например, 1, А или 5, что подходит к ситуации. Если нажатие зафиксировано, то происходит вывод символа в монитор порта с помощью функции Serial Print.
В скобках нужно указывать, какую переменную выводим в порт. Если все сделано верно, в мониторе порта получим символ, на который нажимали. Не забудьте в мониторе порта внизу справа указать скорость передачи данных такую же, как в скетче.

keyboard.write(text, delay=0, restore_state_after=True, exact=None)

Sends artificial keyboard events to the OS, simulating the typing of a given
text. Characters not available on the keyboard are typed as explicit unicode
characters using OS-specific functionality, such as alt+codepoint.

To ensure text integrity, all currently pressed keys are released before
the text is typed, and modifiers are restored afterwards.

  • is the number of seconds to wait between keypresses, defaults to
    no delay.
  • can be used to restore the state of pressed keys
    after the text is typed, i.e. presses the keys that were released at the
    beginning. Defaults to True.
  • forces typing all characters as explicit unicode (e.g.
    alt+codepoint or special events). If None, uses platform-specific suggested
    value.

Описание

Без матричной схемы 61-клавишная клавиатура для синтезатора , электронного органа или цифрового пианино потребовала бы 62 проводов для подключения (по одному на каждую ноту и заземление) — неудобно толстый пучок проводов. С помощью матричной схемы любая из 61 ноты может быть определена с помощью всего 16 проводов. Это схематично изображено в виде матрицы из 8 столбцов и 8 строк проводов с переключателем на каждом пересечении. Контроллер клавиатуры просматривает столбцы. Если была нажата клавиша, контроллер просматривает строки — аналогично настольной игре Морской бой., контроллер определяет комбинацию строки-столбца, в которой была нажата клавиша, и генерирует примечание, соответствующее этой клавише. Этот процесс происходит так быстро, что исполнитель не подозревает ни о какой задержке.

Внутри синтезатора Yamaha SY77 показаны различные внутренние компоненты. Переключатели для каждой клавиши подключены к микросхеме микропроцессора с помощью матричной схемы. Несмотря на то, что у SY77 61 клавиша, от матрицы клавиатуры идут только два небольших ленточных кабеля.

У этой системы есть как минимум два ограничения. Во-первых, он предоставляет только грубый двоичный сигнал включения / выключения для каждой клавиши. Лучшие электронные музыкальные клавиатуры используют два набора переключателей для каждой клавиши, которые слегка смещены. Путем определения времени между активацией первого и второго переключателей можно определить скорость нажатия клавиши, что значительно улучшает динамику производительности клавиатуры.

Во-вторых, инструменты с матричной схемой могут играть только в монофоническом режиме без добавления диода для каждого пересечения клавиш. В диодном предотвращает нежелательные ноты ( «фантомные ключи») от , которые инициированы или предназначены примечаний от маскируются ( ).

Монофонические инструменты и большинство недорогих компьютерных клавиатур сокращают расходы за счет исключения большинства или всех этих диодов. Чтобы избежать «фантомных клавиш», контроллер клавиатуры в современных недорогих компьютерных клавиатурах будет игнорировать дальнейшие нажатия клавиш после нажатия двух клавиш (кроме клавиш-модификаторов ), что называется .

Подход с матричной схемой также используется в немузыкальных клавиатурах, например, в клавиатурах для калькуляторов и буквенных и цифровых клавиатурах QWERTY, используемых для ввода информации в компьютеры. Такой же подход к матричной схеме используется во многих автоматах для игры в пинбол .

Часто в карманных калькуляторах используются для сканирования клавиатуры, что обеспечивает дополнительную экономию.

The Micro Manager Way

Only key codes may be used with the Micro Manager functions. The key codes
represent the location of a key on the USA English keyboard layout. The keyboard
layout is not used. The media and system keys are not supported. With this way,
you are very directly controlling the actual key codes without any extra software
translation!

The USB keyboard can have up to 6 normal keys and 4 modifier keys pressed at the
same time. To micro manage the keyboard, you use functions to set which combination
of keys you want pressed (and zero for the ones you want not pressed), and then
use Keyboard.send_now() to send each combination.

You can use delay() or write code to check millis() between calling Keyboard.send_now(),
to create the condition of a key held down similarly to a human typing.
Auto-repeat is done by the driver on your PC or Mac, so if you have a long
delay between pressing and releasing a normal key, the auto-repeat feature may
deliver many key events to software.

When micro managing, you need to send a zero
for each key you’ve pressed to cause that key to be released (as if a finger were
lifting off the key and its spring were returning it to the resting position).

Modifier Keys

Name Function
MODIFIERKEY_CTRL MODIFIERKEY_RIGHT_CTRL — Control Key
MODIFIERKEY_SHIFT MODIFIERKEY_RIGHT_SHIFT — Shift Key
MODIFIERKEY_ALT MODIFIERKEY_RIGHT_ALT — Alt Key
MODIFIERKEY_GUI MODIFIERKEY_RIGHT_GUI — Windows (PC) or Clover (Mac)

If you want no modifier keys pressed, use a zero.

Keyboard.set_modifier(0);

To press just one modifier is simple.

Keyboard.set_modifier(MODIFIERKEY_SHIFT);

To press more than one modifier, use the logic OR operator. For example:

Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);

Normal Keys

Keyboard.set_key1(KEY_A);
Keyboard.set_key2(KEY_B);
Keyboard.set_key3(KEY_C);
Keyboard.set_key4(KEY_D);
Keyboard.set_key5(KEY_E);
Keyboard.set_key6(KEY_F);

To release a key, you must set it to zero. For the above example, all six
would need to be set back to zero if the next Keyboard.send_now() should
not have any of these 6 keys pressed.

Keyboard.send_now()

The keys remain as you set them, so between each call to Keyboard.send_now(),
you only need to make the changes you need. For example, this code would
send a CTRL-ALT-DELETE sequence.

// press and hold CTRL
Keyboard.set_modifier(MODIFIERKEY_CTRL);
Keyboard.send_now();

// press ALT while still holding CTRL
Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);
Keyboard.send_now();

// press DELETE, while CLTR and ALT still held
Keyboard.set_key1(KEY_DELETE);
Keyboard.send_now();

// release all the keys at the same instant
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();

It is important to set normal keys back to zero and send. If you do not, the
key will remain pressed, and the PC or Mac USB driver will begin auto-repeat.

If you are familiar with the older PS/2 keyboard «scan codes», please be aware
that USB keyboard codes work differently (and use different numerical values).
The old scan codes sent different
messages for key down and key up events, where each message represented a single
key’s change. With USB, each message represents the complete state of the keyboard.
Up to any 6 keys may be pressed at once, plus any combination of the 8 modifier keys.

Схема с дисплеем и матричной клавиатурой

Давайте выведем данные на дисплей.

Я использую дисплей, сопряженный с модулем I2C, который упрощает подключение. Для работы с дисплеем с шиной I2C необходимо установить еще одну библиотеку. Скачать ее можно .

Далее нужно указать размерность дисплея. Используемый в примере дисплей вмещает по 16 символов в каждой из 2-ух строк, это я и указываю. В функции Void Setup
нужно подать питание на дисплей и включить подсветку. Делается это с помощью двух функций: lcd.begin
и lcd.backlight
.

#include // подключаем нашу библиотеку
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4; //число строк у нашей клавиатуры
const byte COLS = 4; //число столбцов у нашей клавиатуры
char hexaKeys = {
{«S»,»4″,»7″,»*»}, // здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования
{«O»,»5″,»8″,»0″},
{«S»,»6″,»9″,»#»},
{«I»,»B»,»C»,»D»}
};
byte rowPins = {5, 4, 3, 2}; //к каким выводам подключаем управление строками
byte colPins = {9, 8, 7, 6}; //к каким выводам подключаем управление столбцами
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
lcd.begin(); // Инициализируем экран
lcd.backlight();
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
lcd.setCursor(1,4); //устанавливаем курсор
lcd.print(customKey);
}
}

В функции Voil Loop
нужно в самом условии прописать строчку lcd.print
для вывода данных на дисплей. И еще нужно предварительно установить положение курсора. В скобках идут 2 цифры: первая — это номер символа, а вторая — номер строки. Нужно помнить, что у этого дисплея отсчет строк и столбцов начинается не с единицы, а с нуля. То есть здесь имеются строчки под номерами 0 и 1, а не 1 и 2, как может показаться сначала. Затем загрузим код в плату и посмотрим, что будет.

Так как дисплей работает по интерфейсу I2C, подключаем к аналоговым выводам. Выходы SDA и SCL соответственно подключаем к А4 и А5, а остальные два — это уже питание и «земля».

Как видим, нажимая на любой символ, видим его отображение на дисплее.

Чтобы стереть строчку, вспомним калькулятор. Когда нужно было удалить значение, мы нажимали на кнопку сброса. Нажмем на такую кнопку в плате и можем заново набирать символы.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы рассмотрим его наиболее важные фрагменты.

Вначале в программе для Arduino необходимо подключить библиотеки, которые мы будем использовать. Библиотека для работы с ЖК дисплеем по умолчанию присутствует в Arduino IDE. А библиотеку для работы к клавиатурой необходимо скачать с Github. По приведенной ссылке вы скачаете ZIP файл с библиотекой, добавьте ее в Arduino IDE с помощью инструкции Sketch -> Include Library -> Add .ZIP и укажите путь к файлу с библиотекой.

Перед началом работы с клавиатурой мы должны в программе с помощью переменных ROWS и COLS указать какое количество строк и столбцов имеет клавиатура, которую мы подключаем к плате Arduino. Также мы должны указать карту клавиатуры, то есть какие клавиши она имеет в своем составе и на каких местах.

Arduino

const byte ROWS = 4; // четыре строки
const byte COLS = 4; // четыре столбца

// указываем карту клавиатуры (Keymap)
char keys = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte rowPins = { 0, 1, 2, 3 };//контакты платы Arduino, к которым подсоединены контакты строк клавиатуры (ROW0, ROW1, ROW2 и ROW3)
byte colPins = { 4, 5, 6, 7 }; // контакты платы Arduino, к которым подсоединены контакты столбцов клавиатуры (COL0, COL1, COL2 и COL3)

1
2
3
4
5
6
7
8
9
10
11
12

constbyteROWS=4;// четыре строки

constbyteCOLS=4;// четыре столбца

 
// указываем карту клавиатуры (Keymap)

charkeysROWSCOLS={

{‘1′,’2′,’3′,’A’},

{‘4′,’5′,’6′,’B’},

{‘7′,’8′,’9′,’C’},

{‘*’,’0′,’#’,’D’}

};

byterowPinsROWS={,1,2,3};//контакты платы Arduino, к которым подсоединены контакты строк клавиатуры (ROW0, ROW1, ROW2 и ROW3)

bytecolPinsCOLS={4,5,6,7};// контакты платы Arduino, к которым подсоединены контакты столбцов клавиатуры (COL0, COL1, COL2 и COL3)

После указания необходимых параметров клавиатуры нам необходимо создать объект клавиатуры, с которым мы дальше будем работать в программе.

Arduino

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // создаем объект клавиатуры

1 Keypadkpd=Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS);//  создаем объект клавиатуры

Также в программе мы должны указать к каким контактам Arduino подключен ЖК дисплей. В соответствии с соединениями на нашей схеме мы должны использовать следующие команды:

Arduino

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // контакты Arduino, к которым подключен ЖК дисплей
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //создаем объект ЖК дисплея

1
2

constintrs=8,en=9,d4=10,d5=11,d6=12,d7=13;// контакты Arduino, к которым подключен ЖК дисплей

LiquidCrystallcd(rs,en,d4,d5,d6,d7);//создаем объект ЖК дисплея

Внутри функции setup мы просто будем высвечивать на ЖК дисплее имя нашего проекта и после этого сразу переходить к функции loop.

В функции loop мы должны проверять печатается ли что либо на клавиатуре, если печатается, то мы должны распознать что печатается и поместить введенные числа в соответствующие переменные. А после нажатия клавиши “=” мы должны рассчитать результат операции и высветить его на экране ЖК дисплея.

Arduino

key = kpd.getKey(); //сохраняем нажатую клавишу в переменной символьного типа

if (key!=NO_KEY)
DetectButtons();

if (result==true)
CalculateResult();

DisplayResult();

1
2
3
4
5
6
7
8
9

key=kpd.getKey();//сохраняем нажатую клавишу в переменной символьного типа

if(key!=NO_KEY)

DetectButtons();

if(result==true)

CalculateResult();

DisplayResult();

Iris Keyboard: собираем сами

Как это спаять?

курс пайки

  • простой паяльник и подставка под него;
  • оловоотсос, чтобы перепаивать кнопки;
  • припой, чтобы скреплять;
  • флюс, чтобы чистить паяльник;
  • кислота, чтобы подготовить плату к пайке.

Рабочий стол в процессе

Пошаговая сборка клавиатуры

  1. Вставляете угловые механизмы.
  2. Насаживаете на плату, выравниваете, припаиваете.
  3. Добавляете остальные кнопки, припаиваете.
  4. Прикручиваете низ корпуса, добавляете кейкапы. Готово!
  • красные — линейные, нажимаются плавно;
  • у коричневых есть бугорок, который чувствуется в момент срабатывания, кнопку выжимать до конца не обязательно.

Features

  • Global event hook on all keyboards (captures keys regardless of focus).
  • Listen and send keyboard events.
  • Works with Windows and Linux (requires sudo), with experimental OS X support (thanks @glitchassassin!).
  • Pure Python, no C modules to be compiled.
  • Zero dependencies. Trivial to install and deploy, just copy the files.
  • Python 2 and 3.
  • Complex hotkey support (e.g. ) with controllable timeout.
  • Includes high level API (e.g. and , ).
  • Maps keys as they actually are in your layout, with full internationalization support (e.g. ).
  • Events automatically captured in separate thread, doesn’t block main program.
  • Tested and documented.
  • Doesn’t break accented dead keys (I’m looking at you, pyHook).
  • Mouse support available via project mouse ().

Работа схемы

Схема проектируемого нами калькулятора представлена на следующем рисунке.

Напряжение +5V и землю для схемы можно непосредственно получить с контактов 5V и ground платы Arduino. Саму плату Arduino можно запитать от компьютера через USB кабель, от батарейки 9 В или адаптера на 12 В.

Необходимые соединения в представленной схеме показаны в следующей таблице.

Контакт Arduino Куда подсоединен
D0 1-й контакт клавиатуры
D1 2-й контакт клавиатуры
D2 3-й контакт клавиатуры
D3 4-й контакт клавиатуры
D4 5-й контакт клавиатуры
D5 6-й контакт клавиатуры
D6 7-й контакт клавиатуры
D7 8-й контакт клавиатуры
D8 Register select pin of LCD (pin 4)
D9 Enable pin of LCD (pin 6)
D10 Data pin 4 (pin 11)
D11 Data pin 4 (pin 11)
D12 Data pin 4 (pin 11)
D13 Data pin 4 (pin 11)
+5V Vdd pin of LCD (pin 2)
Ground Vss,Vee and RW pin of LCD (pin 1,3 and 5)

Некоторые платы Arduino могут выдавать ошибку при загрузке в них программы в то время когда что-либо подсоединено к их контактам 0 и 1. Поэтому если вы столкнулись с такой ошибкой, просто отключите клавиатуру на время загрузки программы.

Когда все соединения в схеме сделаны, ваша конструкция должна выглядеть примерно следующим образом:

Individual Key Press / Release

You can use Keyboard.press(key) and Keyboard.release(key) to send individual
key press and release events. The «key» may be ordinary characters, or special
key codes.

    
    
    
  
    
    
    
  
    
    
      
    
  

All Keys Codes

KEY_A KEY_B KEY_C KEY_D
KEY_E KEY_F KEY_G KEY_H
KEY_I KEY_J KEY_K KEY_L
KEY_M KEY_N KEY_O KEY_P
KEY_Q KEY_R KEY_S KEY_T
KEY_U KEY_V KEY_W KEY_X
KEY_Y KEY_Z KEY_1 KEY_2
KEY_3 KEY_4 KEY_5 KEY_6
KEY_7 KEY_8 KEY_9 KEY_0
KEY_ENTER KEY_ESC KEY_BACKSPACE KEY_TAB
KEY_SPACE KEY_MINUS KEY_EQUAL KEY_LEFT_BRACE
KEY_RIGHT_BRACE KEY_BACKSLASH KEY_SEMICOLON
KEY_QUOTE KEY_TILDE KEY_COMMA KEY_PERIOD
KEY_SLASH KEY_CAPS_LOCK KEY_F1 KEY_F2
KEY_F3 KEY_F4 KEY_F5 KEY_F6
KEY_F7 KEY_F8 KEY_F9 KEY_F10
KEY_F11 KEY_F12 KEY_PRINTSCREEN KEY_SCROLL_LOCK
KEY_PAUSE KEY_INSERT KEY_HOME KEY_PAGE_UP
KEY_DELETE KEY_END KEY_PAGE_DOWN KEY_RIGHT
KEY_LEFT KEY_DOWN KEY_UP KEY_NUM_LOCK
KEYPAD_SLASH KEYPAD_ASTERIX KEYPAD_MINUS KEYPAD_PLUS
KEYPAD_ENTER KEYPAD_1 KEYPAD_2 KEYPAD_3
KEYPAD_4 KEYPAD_5 KEYPAD_6 KEYPAD_7
KEYPAD_8 KEYPAD_9 KEYPAD_0 KEYPAD_PERIOD
MODIFIERKEY_CTRL MODIFIERKEY_RIGHT_CTRL — Control Key
MODIFIERKEY_SHIFT MODIFIERKEY_RIGHT_SHIFT — Shift Key
MODIFIERKEY_ALT MODIFIERKEY_RIGHT_ALT — Alt Key
MODIFIERKEY_GUI MODIFIERKEY_RIGHT_GUI — Windows (PC) or Clover (Mac)
KEY_MEDIA_PLAY KEY_MEDIA_PAUSE
KEY_MEDIA_RECORD KEY_MEDIA_STOP
KEY_MEDIA_REWIND KEY_MEDIA_FAST_FORWARD
KEY_MEDIA_PREV_TRACK KEY_MEDIA_NEXT_TRACK
KEY_MEDIA_VOLUME_DEC KEY_MEDIA_VOLUME_INC
KEY_MEDIA_PLAY_PAUSE KEY_MEDIA_PLAY_SKIP
KEY_MEDIA_MUTE KEY_MEDIA_EJECT
KEY_SYSTEM_POWER_DOWN KEY_SYSTEM_SLEEP
KEY_SYSTEM_WAKE_UP

Версии

Версия 2.4

Поддержка Teensy 3.0, Arduino Due, Arduino Leonardo и других плат.

Французская клавиатурная раскладка – благодарность Дэвиду Чочо (David Chochoi).

Версия 2.2

Добавлена поддержка неамериканских клавиатур. На данный момент поддерживается только немецкая клавиатура (пока) – спасибо Райнеру Бруху (Rainer Bruch), приславшему немецкую клавиатуру для тестирования!

Смотрите пример в Файл > Примеры > PS2Keyboard > International (File > Examples > PS2Keyboard > International).

Версия 2.1

Добавлены следующие улучшения:

  • Таймаут для повторной синхронизации. При рассинхронизации прерывания запускается таймаут продолжительностью 0,25 секунды, после которого автоматически запускается повторная синхронизация. Это должно повысить надежность системы, если условия ее работы далеки от идеальных.
  • Совместимость с новыми версиями Arduino. В последнюю версию Arduino (которая в конце концов стала версией 1.0) были внесены изменения, из-за которых она потеряла совместимость с библиотекой PS2Keyboard. Теперь это исправлено.

Версия 2.0

Добавлены следующие улучшения:

  • Буфферизация скан-кода. Данные, собранные прерыванием, сохраняются в кольцевой буфер. То есть если ваш скетч занят чем-то другим, данные о нескольких нажатых клавишах могут быть сохранены в буфер, что избавляет от необходимости каждый раз вызывать функцию read(). Буфферизация также поддерживает события для отпускания клавиш. Предыдущие версии могли буфферизировать только один скан-код и отклоняли все коды отпускания клавиш.
  • Поддержка функционала клавиш  ⇧ Shift . Теперь библиотека умеет отслеживать состояния обеих клавиш  ⇧ Shift , так что преобразование в формат ASCII теперь генерирует корректные заглавные и прописные символы. Цифры и другие клавиши с несколькими символами теперь тоже корректно реагируют на  ⇧ Shift . Предыдущие версии были ограничены только заглавными буквами и вообще не поддерживали использование  ⇧ Shift .
  • Вывод только символов формата ASCII. Функция read() возвращает только символы формата ASCII или специальные символы, привязанные к контрольным символам ASCII. В предыдущих версиях возвращалась смесь из ASCII и необработанных скан-кодов, причем отличить одни от других было нельзя.
  • Эффективная конверсия. Медленный линейный алгоритм поиска уступил место более быстрой таблице поиска.
  • Поддержка нескольких плат. Добавлена поддержка контактов прерывания для Arduino Mega, Teensy и Sanguino. Также есть возможность без труда добавить другие платы, более того – эти платы могут работать автоматически (безо всяких дополнительных настроек), если их файлы ядра способны определять некоторые псевдонимы, имеющиеся в библиотеке PS2Keyboard.