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

Содержание

Описание

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

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

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

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

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

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.

Known limitations:

  • Events generated under Windows don’t report device id (). #21
  • Media keys on Linux may appear nameless (scan-code only) or not at all. #20
  • Key suppression/blocking only available on Windows. #22
  • To avoid depending on X, the Linux parts reads raw device files () but this requires root.
  • Other applications, such as some games, may register hooks that swallow all key events. In this case will be unable to report events.
  • This program makes no attempt to hide itself, so don’t use it for keyloggers or online gaming bots. Be responsible.
  • SSH connections forward only the text typed, not keyboard events. Therefore if you connect to a server or Raspberry PI that is running via SSH, the server will not detect your key events.

Версии

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

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

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

  • плата 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. в качестве команд можно использовать не только цифры, но и буквы. При этом имеет значение какая буква — прописная или строчная.

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

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

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

Раскладка

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

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, а остальные два — это уже питание и «земля».

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

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

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

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

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

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

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

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

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

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

Плюсы

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

Минусы

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

Объяснение программы для 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();

The Easy Way: Keyboard.print()

Here is a very simple example, using Keyboard.print().

   
    
  
   
  
      
  

When this program is run, it will type «Hello World» and the increasing count.
As you can see in this screenshot, the computer sees a USB keyboard and the
keystrokes directly enter the Arduino editor. If delay(5000) had not been used,
the result could be very unpleasant.

Sometimes «Hello World 0» may not appear. The PC takes a brief time to
detect the presence of a new USB device, but this program begins running
immediately. If you use Keyboard.print() before the PC finishes the detection
process (called «enumeration» in USB lingo), Keyboard.print() does nothing.
A delay() can be added in setup().

Keyboard Layouts

Tools > Keyboard Layout

If you see the wrong characters from Keyboard.print(), Teensy may be emulating
a US keyboard layout, but your computer expects a non-US keyboard, or vise-versa.
The layout setting only affects Keyboard.print() and Keyboard.write().

Using Pushbuttons

The Bounce library provides the easiest way to reliably detect pushbuttons changes.
This code shows the basic approach. Just update()
each object, and then use the
fallingEdge() to check if it has changed.

  
  
  
  
  

  
  
  
    
    
  
    
    
  
    
    
  

For a complete example:
File > Examples > Teensy > USB_Keyboard > Buttons.

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Минусы

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

Mouse and Keyboard libraries

These core libraries allow a 32u4 based boards or Due and Zero board to appear as a native Mouse and/or Keyboard to a connected computer.

A word of caution on using the Mouse and Keyboard libraries: if the Mouse or Keyboard library is constantly running, it will be difficult to program your board. Functions such as Mouse.move() and Keyboard.print() will move your cursor or send keystrokes to a connected computer and should only be called when you are ready to handle them. It is recommended to use a control system to turn this functionality on, like a physical switch or only responding to specific input you can control.

When using the Mouse or Keyboard library, it may be best to test your output first using Serial.print(). This way, you can be sure you know what values are being reported. Refer to the Mouse and Keyboard examples for some ways to handle this.

To use this library

Mouse

The mouse functions enable a Leonardo, Micro, or Due to control cursor movement on a connected computer. When updating the cursor position, it is always relative to the cursor’s previous location.

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

Keyboard

The keyboard functions enable a Leonardo, Micro, or Due to send keystrokes to an attached computer.

Note: Not every possible ASCII character, particularly the non-printing ones, can be sent with the Keyboard library. The library supports the use of modifier keys. Modifier keys change the behavior of another key when pressed simultaneously. See here for additional information on supported keys and their use.

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

Examples

  • KeyboardAndMouseControl: Demonstrates the Mouse and Keyboard commands in one program.
  • KeyboardMessage: Sends a text string when a button is pressed.
  • KeyboardLogout : Logs out the current user with key commands
  • KeyboardSerial: Reads a byte from the serial port, and sends back a keystroke.
  • KeyboardReprogram : opens a new window in the Arduino IDE and reprograms the board with a simple blink program
  • ButtonMouseControl: Control cursor movement with 5 pushbuttons.
  • JoystickMouseControl: Controls a computer’s cursor movement with a Joystick when a button is pressed.

Last revision 2019/12/25 by SM
Reference Home

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.

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

На этом уроке мы узнаем, как подключить мембранную клавиатуру 4 X 4 к ардуино и запрограммировать обработку нажатий клавиатуры в среде IDE Arduino В проектах на Ардуино может возникнуть  необходимость ввода начальной информации в систему. Например,  активации системы Arduino по паролю, установка начальных положений сервоприводов у манипулятора, управление системой  вручную, задания порогов значений датчиков для срабатывания датчиков. Для того чтобы пользователь сам мог вводить информацию и настраивать систему ардуино необходимо подключить клавиатуру к системе ардуино. Удобней всего подключить к ардуино мембранную матричную клавиатуру Подключение матричной клавиатуры к Arduino.
1 порт клавиатуры подключатся к цифровому пину ардуино 13
2 порт клавиатуры подключатся к цифровому пину ардуино 12
3 порт клавиатуры подключатся к цифровому пину ардуино 11
4 порт клавиатуры подключатся к цифровому пину ардуино 10
5 порт клавиатуры подключатся к цифровому пину ардуино 9
6 порт клавиатуры подключатся к цифровому пину ардуино 8
7 порт клавиатуры подключатся к цифровому пину ардуино 7
8 порт клавиатуры подключатся к цифровому пину ардуино 6
Порты клавиатуры 5-8 отвечают за столбцы.
Порты клавиатуры 1-4 отвечают за строки.
Схема подключения матричной клавиатуры к ардуино представлена на рисунке. 

Example

/**
 * This example turns the ESP32 into a Bluetooth LE keyboard that writes the words, presses Enter, presses a media key and then Ctrl+Alt+Delete
 */
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
}

void loop() {
  if(bleKeyboard.isConnected()) {
    Serial.println("Sending 'Hello world'...");
    bleKeyboard.print("Hello world");

    delay(1000);

    Serial.println("Sending Enter key...");
    bleKeyboard.write(KEY_RETURN);

    delay(1000);

    Serial.println("Sending Play/Pause media key...");
    bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);

    delay(1000);

    Serial.println("Sending Ctrl+Alt+Delete...");
    bleKeyboard.press(KEY_LEFT_CTRL);
    bleKeyboard.press(KEY_LEFT_ALT);
    bleKeyboard.press(KEY_DELETE);
    delay(100);
    bleKeyboard.releaseAll();

  }
  Serial.println("Waiting 5 seconds...");
  delay(5000);
}