Библиотека keypad для работы с клавиатурой на arduino

Оглавление

Introduction: Wireless Keyboard With Arduino

By sistemasymicrosTecnimakersFollow

More by the author:

About: My name is José Luis Bejarano Vásquez.Tecnólogo en electrónica, estudiante de ing electrónica, desarrollador de software. Aficionado a la robótica. Blogger.

More About sistemasymicros »

Hi everyone, in this tutorial i am going to show how to build a wireless keyboard with arduino and bluetooth that allows to write remotely to our Pc with Os windows.

See video

The program only allows to send the following letters, due to limitations of the library used.:

  • Alphanumeric characters in lower and uppercase

  • Enter, Tab, delete and backspace.
  • up, down, left and right arrows.
  1. PARTS
  • Arduino One
  • Keyboard Ps2.
  • Bluetooth module HC-05.
  • Jumpers.

Step 2: Become Wireless…

Lets use the pins 4 and 5 of the arduin for the serial communication, so there is to import the library SoftwareSerial:

#include <SoftwareSerial.h>

Create an object called blue and set the data rate in 9600.

SoftwareSerial blue(4,5); //Rx,Tx

blue.begin(9600);

The full code is:

#include <PS2Keyboard.h>#include <SoftwareSerial.h>

char rec;

SoftwareSerial blue(4,5); //Rx,Tx

const int PinData = 3;

const int PinClock = 2;

PS2Keyboard teclado;

void setup()

{

delay(1000);

teclado.begin(PinData, PinClock);

blue.begin(9600);

}

void loop()

{ // If the keyboard is available

if (teclado.available())

{ // Reads the pressed key

char c = teclado.read(); // Checks some special keys

if (c == PS2_ENTER)

{

blue.println(«ent»);

}

else if (c == PS2_TAB)

{

blue.println(«tab»);

}

else if (c == PS2_ESC)

{

blue.println(«esc»);

}

else if (c == PS2_BACKSPACE)

{

blue.println(«bsp»);

}

else if (c == PS2_PAGEDOWN)

{

blue.println(«pgd»);

}

else if (c == PS2_PAGEUP)

{

blue.println(«pgu»);

}

else if (c == PS2_LEFTARROW)

{

blue.println(«lft»);

}

else if (c == PS2_RIGHTARROW)

{

blue.println(«rgt»);

}

else if (c == PS2_UPARROW)

{

blue.println(«upk]»);

}

else if (c == PS2_DOWNARROW)

{

blue.println(«dwn»);

}

else if (c == PS2_DELETE)

{

blue.println(«del»);

}

else

{ // Print the normal characters

blue.println(c);

}

}

}

Download here the code for arduino.

Next step receive the keys send…

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

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

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

Подключать ее к плате следует 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.
В скобках нужно указывать, какую переменную выводим в порт. Если все сделано верно, в мониторе порта получим символ, на который нажимали. Не забудьте в мониторе порта внизу справа указать скорость передачи данных такую же, как в скетче.

Работа схемы

Схема подключения клавишной панели к плате Arduino Uno представлена на следующем рисунке.

Жидкокристаллический (ЖК) дисплей 16×2 использует 16 контактов для своей работы в случае если нужен черный цвет. Если черный цвет не нужен, то достаточно 14 контактов. В этом случае контакты черного цвета можно либо запитать, либо оставить их как есть. То есть из 14 контактов ЖК дисплея мы имеем 8 контактов для данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (VEE) – определяет насколько «толстыми» будут выглядеть символы на экране, и 3 управляющих контакта (RS&RW&E).

В представленной схеме подключения клавишной панели к плате Arduino Uno мы использовали только два управляющих контакта ЖК дисплея – это позволяет лучше понять логику работы схемы начинающим. Контакт для управления контрастностью и READ/WRITE сравнительно редко используются и в нашем случае их можно замкнуть на землю. Это переводит ЖК дисплей в режим чтения и обеспечивает ему максимальную контрастность. Поэтому нам нужно только управлять состоянием контактов ENABLE и RS чтобы передавать символы и данные на ЖК дисплей. Более подробно об этих процессах можно прочитать в статье о подключении ЖК дисплея к плате Arduino.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS – на землю
PIN2 или VDD или VCC – к источнику питания +5 В
PIN3 или VEE – на землю (обеспечивает наилучшую контрастность – лучше для начинающих)
PIN4 или RS (выбор регистра) – к контакту PIN8 ARDUINO UNO
PIN5 или RW (Read/Write) – на землю (переводит ЖК дисплей в режим чтения, что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable — доступность) к контакту PIN9 ARDUINO UNO
PIN11 или D4 – к контакту PIN10 ARDUINO UNO
PIN12 или D5 – к контакту PIN11 ARDUINO UNO
PIN13 или D6 – к контакту PIN12 ARDUINO UNO
PIN14 или D7 – к контакту PIN13 ARDUINO UNO

Клавишная панель подключена к контактам 0-7 Arduino Uno.

Матричные клавиатуры

Самый простой, дешёвый и популярный вид клавиатур. Он относительно прост в изготовлении и заполняет собой большую часть рынка модулей ардуино. Выглядит чаще всего следующим образом:

Принцип работы

Понять как устроенная данная клавиатура можно изучив следующую схему:

Чтобы понять какая кнопка была нажата, нужно подавать сигнал на первые четыре контакта модуля и смотреть какой сигнал возвращается со второй. Но не стоит пугаться того, что вам придется писать алгоритмы обработки для восьми пинов вручную — в этом нам поможет готовая библиотека «keypad.h», благодаря которой нам не придется изобретать велосипед.

Подключение к плате

Подключение собственно модуля

В этой статье я воспользуюсь следующей схемой подключения:

У Вас наверное возникает вопрос: «Почему я решил использовать пины со второго по девятый, пропустив нулевой и первый?» — дело в том, что некоторые модули, используют их в качестве каналов RX и TX для получение и передачи данных соответственно. К примеру, блютуз модуль. По-этому с учётом возможного дополнения проекта другими модулями, было решено оставить данные пины подключения свободными.

Написание скетча

Для начала, для того, чтобы получить возможность использовать библиотеку для подключения клавиатур в коде, нужно установить её на ваше устройство. Это можно сделать следующим образом: в самой Arduino IDE нажимаем Скетч -> Подключить библиотеку -> Управлять библиотеками… либо используем комбинацию гарячих клавиш «Ctrl + Shift + I». В поиске вбиваем «keypad.h»(без скобочек) и нажимаем «Установка».

После установки приступаем к написанию скетча:

Минусы

  • Слишком много пинов нужно подключить для работы. Это довольна крупная проблема, если вы создаёте не калькулятор или кодовый замок, а более масштабный проект, в котором еще нужно задействовать огромное количество различных модулей — возможно им просто не хватит пинов.
  • Слишком низкое качество выполнения модуля: никто вам не гарантирует постоянный стабильный сигнал. Оригинальные клавитуры выполнены не на очень высоком уровне, а если вы вообще сделали заказ на Aliexpress, то скорее всего, вам предстоит исправлять косяки китайских инженеров паяльником, чтобы добится стабильной работы.
  • Используется дополнительная библиотека, которая также будет занимать память микроконтроллера, которой у него и так не очень много. Если вы пишите большой проект с множеством функций и вычислений и вам каждый байт на счету нужно считывать данные с клавиатуры вручную либо использовать аналоговую клавиатуру.

Использование

Код ниже демонстрирует, как использовать библиотеку. Другие константы для клавиш смотрите в файле PS2Keyboard.h.

 1 #include <PS2Keyboard.h>
 2 
 3 #define DATA_PIN 4
 4 PS2Keyboard keyboard;
 5 
 6 void setup() {
 7   keyboard.begin(DATA_PIN);
 8 
 9   Serial.begin(9600);
10   Serial.println("hi");
11   delay(1000);
12 }
13 
14 void loop() {
15   if(keyboard.available()) {
16     byte dat = keyboard.read();
17     byte val = dat - '0';
18 
19     if(val >=  && val <= 9) {
20       Serial.print(val, DEC);
21     } else if(dat == PS2_KC_ENTER) {
22       Serial.println();
23     } else if(dat == PS2_KC_ESC) {
24       Serial.println("");
25     } 
26   }
27 }

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 ().

Аналоговые клавиатуры

Принцип работы

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

Подключение к плате

Итак: аналоговый выход клавиатуры соединяем с любым аналоговым пином на плате, контакт VCC на плате соединяем с 3.3V(не смотрите на надпись на самой клавиатуре, которая гласит о 5V — это ошибка), а GND на плате с GND на модуле. Вы можете воспользоватся следующей схемой:

Написания скетча

Здесь не нужно использовать сторонние библиотеки, т.к. всё предельно просто и понятно. Вот собственно и сам код, который считывает нажатую кнопку и выводит её номер, от 1 до 16(слева на право, с верху в низ) либо 0 если ничего не нажато, в монитор порта.

Плюсы и минусы

Плюсы

  • Очень простое подключение
  • Занимает лишь один пин
  • Экономит память, которую вы не тратите под библиотеку
  • Обеспечивает стабильную работу(при условии, если вы не будете нажимать более одной кнопки одновременно)

Минусы

  • Стоит дороже матричных клавиатур
  • Скорее всего единственным способом покупки будет заказывать с Китая и доставка займёт какое-то время

API docs

Just remember that you have to use instead of just and you need these two lines at the top of your script:

In addition to that you can send media keys (which is not possible with the USB keyboard library). Supported are the following:

  • KEY_MEDIA_NEXT_TRACK
  • KEY_MEDIA_PREVIOUS_TRACK
  • KEY_MEDIA_STOP
  • KEY_MEDIA_PLAY_PAUSE
  • KEY_MEDIA_MUTE
  • KEY_MEDIA_VOLUME_UP
  • KEY_MEDIA_VOLUME_DOWN
  • KEY_MEDIA_WWW_HOME
  • KEY_MEDIA_LOCAL_MACHINE_BROWSER // Opens «My Computer» on Windows
  • KEY_MEDIA_CALCULATOR
  • KEY_MEDIA_WWW_BOOKMARKS
  • KEY_MEDIA_WWW_SEARCH
  • KEY_MEDIA_WWW_STOP
  • KEY_MEDIA_WWW_BACK
  • KEY_MEDIA_CONSUMER_CONTROL_CONFIGURATION // Media Selection
  • KEY_MEDIA_EMAIL_READER

There is also Bluetooth specific information that you can set (optional):
Instead of you can do . (Max lenght is 15 characters, anything beyond that will be truncated.)
The third parameter is the initial battery level of your device. To adjust the battery level later on you can simply call e.g. (set battery level to 50%).
By default the battery level will be set to 100%, the device name will be and the manufacturer will be .
There is also a method to set a delay between each key event. E.g. (10 milliseconds). The default is .
This feature is meant to compensate for some applications and devices that can’t handle fast input and will skip letters if too many keys are sent in a small time frame.

keyboard.add_word_listener(word, callback, triggers=[‘space’], match_suffix=False, timeout=2)

Invokes a callback every time a sequence of characters is typed (e.g. ‘pet’)
and followed by a trigger key (e.g. space). Modifiers (e.g. alt, ctrl,
shift) are ignored.

  • the typed text to be matched. E.g. ‘pet’.
  • is an argument-less function to be invoked each time the word
    is typed.
  • is the list of keys that will cause a match to be checked. If
    the user presses some key that is not a character (len>1) and not in
    triggers, the characters so far will be discarded. By default the trigger
    is only .
  • defines if endings of words should also be checked instead
    of only whole words. E.g. if true, typing ‘carpet’+space will trigger the
    listener for ‘pet’. Defaults to false, only whole words are checked.
  • is the maximum number of seconds between typed characters before
    the current word is discarded. Defaults to 2 seconds.

Returns the event handler created. To remove a word listener use
or .

Note: all actions are performed on key down. Key up events are ignored.
Note: word matches are case sensitive.

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

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

курс пайки

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

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

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

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

Версии

Версия 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.

keyboard.get_typed_strings(events, allow_backspace=True)

Given a sequence of events, tries to deduce what strings were typed.
Strings are separated when a non-textual key is pressed (such as tab or
enter). Characters are converted to uppercase according to shift and
capslock status. If is True, backspaces remove the last
character typed.

This function is a generator, so you can pass an infinite stream of events
and convert them to strings in real time.

Note this functions is merely an heuristic. Windows for example keeps per-
process keyboard state such as keyboard layout, and this information is not
available for our hooks.

get_type_strings(record()) #-> 

Example

Use as library:

import keyboard

keyboard.press_and_release('shift+s, space')

keyboard.write('The quick brown fox jumps over the lazy dog.')

keyboard.add_hotkey('ctrl+shift+a', print, args=('triggered', 'hotkey'))

# Press PAGE UP then PAGE DOWN to type "foobar".
keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar'))

# Blocks until you press esc.
keyboard.wait('esc')

# Record events until 'esc' is pressed.
recorded = keyboard.record(until='esc')
# Then replay back at three times the speed.
keyboard.play(recorded, speed_factor=3)

# Type @@ then press space to replace with abbreviation.
keyboard.add_abbreviation('@@', 'my.long.email@example.com')

# Block forever, like `while True`.
keyboard.wait()

Use as standalone module:

# Save JSON events to a file until interrupted:
python -m keyboard > events.txt

cat events.txt
# {"event_type": "down", "scan_code": 25, "name": "p", "time": 1622447562.2994788, "is_keypad": false}
# {"event_type": "up", "scan_code": 25, "name": "p", "time": 1622447562.431007, "is_keypad": false}
# ...

# Replay events
python -m keyboard < events.txt

Библиотеки Mouse и Keyboard

Эти базовые библиотеки позволяют платам Arduino Leonardo, Micro или Due при подключении к компьютеру определяться как обычная мышь и/или клавиатура.

Предосторожности при использовании библиотек Mouse и Keyboard: при постоянной работе библиотек Mouse или Keyborad могут возникнуть сложности во время программирования вашего устройства. Функции, подобные Mouse.move() или Keyboard.print() могут перемещать курсор и сигнализировать о нажатии клавиш подключенному компьютеру, поэтому должны вызываться только тогда, когда вы готовы контролировать их работу

Рекомендуется использовать какую-нибудь систему управления, позволяющую выключать подобную функциональность, например, в зависимости от положения переключателя или сигнала на выводе, состояние которого вы можете контролировать.

Перед использованием функций библиотек Mouse или Keyboard непосредственно с компьютером, лучше всего протестировать их возвращаемые значения с помощью функции Serial.print(). Так вы сможете удостовериться в правильности отправляемых значений. Подробнее см. примеры работы с библиотеками Mouse и Keyboard ниже.

Мышь (библиотека Mouse)

Функции для работы с мышью позволяют Leonardo, Micro или Due контролировать движение курсора на подключенном компьютере. Обновление позиции курсора всегда осущетсвляется относительно его предыдущего положения.

  • Mouse.begin()
  • Mouse.click()
  • Mouse.end()
  • Mouse.move()
  • Mouse.press()
  • Mouse.release()
  • Mouse.isPressed()

Клавиатура (библиотека Keyboard)

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

Примечание: Библиотека Keyboard позволяет отправлять не все ASCII-символы, в частности она не позволяет отправлять непечатаемые символы. Библиотека также поддерживает использование клавиш-модификаторов, которые при одновременном нажатии с другой клавишей изменяют ее поведение. Дополнительную информацию о поддерживаемых клавишах и их применении см. здесь.

  • Keyboard.begin()
  • Keyboard.end()
  • Keyboard.press()
  • Keyboard.print()
  • Keyboard.println()
  • Keyboard.release()
  • Keyboard.releaseAll()
  • Keyboard.write()

Примеры

  • KeybaordAndMouseControl: Демонстрация команд Mouse и Keyboard в одной программе.
  • KeyboardMessage: Отправка текстовой строки при нажатии кнопки.
  • KeyboardLogout : Завершение сеанса текущего пользователя командой сочетания клавиш
  • KeyboardSerial: Считывание байта из последовательного порта и обратная отправка сигнала нажатия клавиши.
  • KeyboardReprogram : Открытие нового окна в Arduino IDE и перепрограммирование платы простой программой мигания светодиодом
  • ButtonMouseControl: Управление движением курсора 5 кнопками.
  • JoystickMouseControl: Управление движением курсора компьютера с помощью джойстика при нажатии кнопки.

Что вам нужно

  • 1 х Arduino Pro Micro.
  • Мгновенные кнопки или кнопки клавиатуры.
  • Резисторы 10 кОм.
  • Ассорти из соединительных проводов.
  • 1 х 220 Ом резисторы.
  • 1 х 5 мм (0,197 дюйма) светодиод.
  • 1 х 5 мм светодиодный держатель.

Вам понадобится очень специфическая Arduino для этого проекта. Я использую Pro Micro, так как они такие маленькие и дешевые, что вам нужен Arduino с встроенным в процессор USB-Serial (Atmega32u4). Можно построить этот проект с другими Arduinos, такими как UNO или Nano, однако для того, чтобы все заработало, требуется много напряженной работы, чтобы заново прошить биос и покопаться. Клоны других моделей Arduino обычно не работают вообще, но клон Pro Micro тоже подойдет.

первый.

Вот схема макета (исключая концевые отведения):

Убедитесь, что вы вырезали следы под резисторами и Arduino. Так как считывание схемы платы может быть очень трудным, вот макетная версия:

Это плотная посадка, чтобы сжать все компоненты в такое маленькое пространство. Отрежьте углы вашего картона следующим образом:

Это должно аккуратно вписаться в нижней части корпуса:

Убедитесь, что дорожки движутся вертикально.

Подключить анод (длинная нога, позитив) светодиода к резистору 200 Ом, а затем к +5 В. Подключите катод (короткая нога, негатив) К земле, приземляться. Накройте ножки термоусадочной трубкой, а затем вставьте держатель в светодиод. Нет необходимости в каком-либо клее, однако ваш светодиодный держатель может быть не плотным, поэтому вам, возможно, придется адаптировать эти инструкции.

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

Теперь пришло время припаять все светодиоды для клавишных колпачков. Они используются исключительно для того, чтобы клавиши светились, поэтому вы можете пропустить их, если хотите, и их не нужно подключать к цифровому выводу, только для питания. Соедините все аноды вместе и все катоды вместе. Учитесь на моей ошибке — это гораздо проще сделать, прежде чем подключать коммутаторы! Подсоедините аноды к +5 В через резистор 220 Ом, а катоды заземлите. Эти светодиоды подключены параллельно. Вот схема только для этих светодиодов:

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

Включите Arduino для проверки работы всех светодиодов. Вам не нужно загружать любой код. Если какие-либо светодиоды не работают, проверьте и перепроверьте проводку.

Теперь подключите коммутаторы. Они должны быть подключены через резистор 10 кОм, иначе Arduino умрет. Это называется мертвым коротким замыканием — +5 В идет прямо в землю, и все, что осталось от вашего Arduino, будет клубом дыма (поверьте мне, я уже убил одного, так что вам не придется). Вот схема для одного переключателя:

Эта схема одинакова для всех девяти переключателей. Подключите переключатели к цифровым контактам с 2 по 10, каждый со своим собственным резистором 10К на землю. Будьте осторожны при пайке переключателей Cherry MX, они могут быть немного хрупкими, у меня несколько контактов сломалось. Возможно, вы захотите припаять их непосредственно к еще большему количеству полос, но концевые выводы все еще подходят.

Вот и все для проводки. Возможно, вы захотите смонтировать гнездо USB типа B, однако крошечные контакты на них часто довольно трудно паять. Если вы не хотите этого делать, не беспокойтесь. Разъем Micro USB на Arduino аккуратно подходит к отверстию в корпусе. Если вас немного смущают разные типы USB, убедитесь, что вы понимаете различия

,

Наконец, дважды проверьте правильность схемы. Короткий может легко уничтожить Arduino, и это может быть легко сделать с помощью картона.

Как управлять Ардуино с клавиатуры

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • светодиод и резистор 220 Ом;
  • сервопривод;
  • провода «папа-папа» и «папа-мама».

Управление светодиодом на Arduino UNO с компьютера

Остальные исполнительные устройства для Arduino UNO вы можете взять на свое усмотрение и самостоятельно попробовать управлять ими через компьютер с помощью USB кабеля. Соберите на макетной плате схему с одним светодиодом из первого занятия Что такое Ардуино и как им пользоваться, а после сборки схемы со светодиодом загрузите следующий скетч в микроконтроллер.

Скетч. Взаимодействие Ардуино и компьютера

int val; // освобождаем память в контроллере для переменой

void setup() {
   Serial.begin(9600); // подключаем последовательный порт
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
}

void loop() {
    // проверяем, поступают ли какие-то команды
   if (Serial.available()) {

       val = Serial.read(); // переменная val равна полученной команде

       if (val == '1') {digitalWrite(13, HIGH);} // при 1 включаем светодиод
       if (val == '0') {digitalWrite(13, LOW);} // при 0 выключаем светодиод

   }
}

Пояснения к коду:

  1. функция проверяет поступление команд с компьютера;
  2. функция читает данные, поступившие в Serial monitor.
  3. в условном операторе стоит знак двойное равенство «соответствие», а в скобках необходимо использовать одинарные кавычки.

Управление сервоприводом на Arduino UNO с компьютера

После сборки схемы загрузите следующий скетч в плату

Скетч. Управление сервоприводом с компьютера

#include <Servo.h> // подключаем библиотеку для сервопривода
Servo servo; // объявляем переменную servo типа "servo"
int val; // освобождаем память в контроллере для переменой

void setup() {
   Serial.begin(9600); // подключаем последовательный порт
   servo.attach(11); // привязываем сервопривод к выходу 11
}

void loop() {
   // проверяем, поступают ли какие-то команды
   if (Serial.available()) {

       val = Serial.read(); // переменная val равна полученной команде

       if (val == '1') { servo.write(10); } // при 1 поворачиваем серво на 10
       if (val == '2') { servo.write(45); } // при 2 поворачиваем серво на 45
       if (val == '3') { servo.write(90); } // при 3 поворачиваем серво на 90

   }
}

Пояснения к коду:

  1. в некоторых примерах программ можно встретить такой вариант проверки появления данных в Serial monitor .
  2. в качестве команд можно использовать не только цифры, но и буквы. При этом имеет значение какая буква — прописная или строчная.

Описание

Матричная клавиатура

Библиотека служит для использования совместно с Arduino клавиатур матричного типа. Текущая версия библиотеки (3.1) поддерживает множественные нажатия.

Данная библиотека была создана для создания уровня абстракции для аппаратного обеспечения. Она улучшает читаемость кода, скрывая от пользователя вызовы функций и .

Версия 3.0 (опубликована 19 июля 2012) была переписана для поддержки по умолчанию множественных нажатий. Но для тех, кому всё еще изначальная функциональность с одиночными нажатиями, библиотека обеспечивает полную обратную совместимость.

Вам нет необходимости использовать внешние резисторы или диоды, так как библиотека использует внутренние подтягивающие резисторы в микроконтроллере на Arduino и дополнительно обеспечивает высокое входное сопротивление на всех неиспользуемых выводах столбцов.

Bandwidth — Less Than You Might Expect

The HID protocol is used by USB keyboards, and HID uses the USB «interrupt»
transfer type, which allocates 1 packet per a configurable number of USB
frames. Each USB frame is 1ms, and the Teensyduino USB keyboard code
requests the interval to be every frame. If the operating system honors
this request, bandwidth is available for 1000 packets per second.

Each keystroke requires 2 calls to Keyboard.send_now(), the first to press
the key and the second to release it. This translates to 500 keystrokes per
second. Of course, you can send 10 different keys in each, but logic inside
the USB device driver will analyze for changes, which imposes a practical
limit, especially when sending to already-written software which expects
«normal» typing.

Some operating systems might disregard the request and instead schedule 1
packet every 8 frames. At 16ms each, only 62.5 keystrokes per second are
possible.

Some software, even when running on a multi-gHz, multi-core processor may
perform so much work per keystroke (or be written so infficiently),
that sending at such «fast» speeds could overwhelm the computer. You might
need to add extra delays.

USB keyboard is slow. If you need substantial bandwidth, use USB serial.

Step 3: Writing in Our Pc

For receiving the characters send by the keyboard we need a program that capture the data and send the keys to the desired program in our Pc. Download this program and follow the next steps for a correct communication between our Pc and the bluetooth module:

  1. Turn on the bluetooth in the Pc.
  2. Connect and pair the bluetooth module HC-05 with our PC.
  3. Open the configuration window of the bluetooth in the Pc, select the tab (ports com) and looks for the output port number. (This port number will be assigned to the serial port of the program in visual basic)
  4. Execute the program, select the port number of the last setp and press the connect (conectar )button.
  5. If you got no errors, open notepad for example, start to write in the keyboard and the pressed keys must be shown in the notepad.

Download here the program in visual basic 2010.

I hope you liked this project and vote for it in the sensor contest.

If you have any suggestions, comments please let me know it.

Примеры

Библиотека снабжена несколькими примерами. Немного видоизменённые примеры представлены ниже.

HelloKeypad

Пример рассчитан на клавиатуру 4х3, поэтому необходимо внести небольшие изменения в коде (выделено жирным).

Залейте прошивку, запустите Serial Monitor и нажимайте на клавиши. Символ нажатой клавиши должен отображаться на экране.

MultiKey

Пример позволяет обрабатывать одновременные нажатия клавиш. Он также предназначен для клавиатуры 4х3, поэтому внесём аналогичные изменения в код.

Для демонстрации сначала была нажата клавиша «А». Удерживая её, нажал на клавишу «2», которую затем отпустил.

В поисках эргономики

  1. В офисе я уже видел Microsoft Sculpt, на ней руки лежат правильно, но кнопки всё ещё как на печатной машинке.
  2. Изгиба можно добиться иначе, совсем разделив клавиатуру пополам, например, Ultimate hacking keyboard.
  3. Есть ортолинейные клавиатуры, у которых клавиши стоят ровно по сетке, например, Plank EZ. Нажимать клавиши удобно, но руки придётся ставить прямо, а хочется под углом.
  4. Можно разделить ортолинейную клавиатуру пополам, например, Levinson. Уже лучше, но есть ли ещё?
    Можно ли сместить кнопки вертикально, чтобы они легли ровно под пальцы? Конечно.
    Вариантов не очень много, но выбор есть.
  5. Model 01 keyboard крута, каждая клавиша уникальна, сделана под палец. Стоит $300, но снята с продажи, ждём новую.
  6. Ergodox EZ мне не понравилась: слишком большая даже на фото, не понимаю, что делать с таким количеством кнопок у большого пальца. С ценником тоже — $300+.
  7. Можно сделать шаг назад, не разделять, а просто правильно поставить клавиши. Так сделано в Atreus, но продажи ещё не начались (по плану в августе-сентябре).

Библиотека Password

Клавиатуру логично использовать в качестве ввода пароля для доступа к каким-то возможностям. Для удобной обработки вводимых символов можно использовать готовую библиотеку Password. К сожалению, её нельзя установить через менеджер библиотек, поэтому придётся скачать архив и разместить папку в папке libraries самостоятельно.

У библиотеки несколько функций.

set(password)
Устанавливает пароль
is(password)
Совпадает ли текущий набор пароля с установленным паролем
append(character)
Добавляет символ к текущему вводу пароля
reset()
Сбрасывает набранный ввод пароля
evaluate()
Совпадает ли текущий набор пароля с установленным паролем

Скетч для ввода пароля

В скетче устанавливается пароль «1234». Максимальное число ввода символов — 6. Если это число будет превышено, то автоматически сравниваем введённый набор с паролем и выдаём результат, сбрасывая ввод. Это избавит нас от бесконечного ввода.

Клавиши «A», «B», «C» ничего не делают, их можно не трогать. Для проверки пароля нужно нажать набор чисел и затем кнопку # (решётку). В успешном случае выводится сообщение OK, в противном случае появится сообщение о неправильном пароле.

Остальные кнопки меняют пароль (на 123), сбрасывают введённый пароль для повторного набора (если заметил ошибку при наборе).

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

Если вам нужные несколько паролей, то создавайте разные экземпляры.