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

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.

Технические характеристики

  • Размеры: 68×77×0,8 мм
  • Рабочее напряжение: до 12 В
  • Максимальный ток: 100 мА
  • Сопротивление изоляции: >100 МОм
  • Сопротивление контактов: <200 Ом
  • Дребезг контактов: <5мсек
  • Ресурс: 1 миллион нажатий
  • Рабочая температура: от 0 до +70 градусов Цельсия
  • Допустимая влажность: 90%-95%, 240 часов
  • Вес: 10 г

Для удобства установим готовую библиотеку Keypad. Устанавливайте через менеджер библиотек в Arduino IDE.

Исходники для просмотра кода библиотеки.

Само подключение не должно вызвать трудностей. У клавиатуры восемь выводов в виде шлейфа, который нужно подключить к цифровым выводам платы от 9 до 2. Шлейф имеет мама-разъём с шагом 2,54 мм — можно легко установить с помощью макетной платы и линейки штырьковых соединителей. Также можно использовать перемычки папа-папа.

Описание

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

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

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

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

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

Функции

Инициализирует внутреннюю раскладку клавиатуры, чтобы та соотвествовала .
Данная функция будет ждать бесконечно, пока кто-нибудь не нажмет клавишу. Предупреждение: она блокирует весь остальной кода, пока кнопка не будет нажата. Это означает, что не будет происходить ни мигание светодиода, ни обновление LCD дисплея, ничего, кроме выполнения функций прерываний.
Возвращает кнопку, которая нажата, если таковая имеется. Данная функция является неблокирующей.
Возвращает текущее состояние любой из клавиш. Возвращается одно из четырех состояний: , , и .
Дает вам знать, когда изменилось состояние кнопки. Например, вместо проверки нужной клавиши, вы можете проверить, когда клавиша была нажата.
Устанавливает количество миллисекунд, которое пользователь должен удерживать кнопку нажатой, чтобы было вызвано состояние HOLD.
Устанавливает количество миллисекунд, которое клавиатура ждет перед тем, как применить новое нажатие кнопки или событие кнопки. Это «время задержки» в методе обработки дребезга контактов.
Вызывает событие, если используется клавиатура.

Методы класса и определения для работы с множественными нажатиями:

Список активных клавиш. (равен 10) задает максимальное количество клавиш в активном списке.
Заполняет массив активных клавиш (до 10 значений). Возвращает при наличии любых активных клавиш.
Возвращает , если кнопка с кодом нажата.
Поиск клавиши по коду в списке активных клавиш. Возвращает , если клавиша не найдена, или индекс в массиве активных клавиш.

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.

Несколько примеров из моей практики

  • расшарить скриншот без обработки через гугл драйв (использую, когда надо очень быстро создать ссылку и скинуть в чат, или когда не надо обрабатывать изображение);
  • создать видеозапись и отправить ее в редактор;
  • создать скриншот, и без обработки и вопросов сохранить на жесткий диск;
  • создать скриншот, и скопировать его в буфер обмена;
  • стрелка;
  • линия;
  • подсвеченная область;
  • вставка текста;
  • сглаживание слоев;
  • вставка маркеров;
  • redo и undo, они же при нажатии на кнопку уровня L1 уменьшают\увеличивают шрифт в текстовой вставке;
  • основная кнопка снятия скриншотов (отправляет изображение в редактор);
  • кнопка ESC, на случай, если надо изменить область захвата;
  • обычный запуск консоли:
  • L1 + кнопка ADB — запуск с удалением данных из буфера обмена (что бы не подтягивать старые логи);
    Прописываем в bat:
  • Все логи с ADB сохраняем в текстовый файл с таким форматом имени: ADB_logs_»%hour%».»%minute%».»%sec%_%day%.%month%.%year%.txt
    Прописываем в bat:
  • Первый открывает url вида:
  • L1 + кнопка открывает форму нового письма:

Задача:Дано:Решение:

  • открываем веб-форму со списком вопросов;
  • копируем вопрос в буфер обмена (я использую для этого доп. клавиши на мышке);
  • переводим фокус в Notepad++;
  • жмем на макро клавишу, которая находит текст вопроса и прячет окно поиска, оставляя подсвеченным текст вопроса с правильным ответом в диапазоне от -3 до 3;
  • кликаем в веб-форме на правильный ответ и тд.;

Результат

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

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

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

Introduction: Connect Arduino UNO to USB Keyboard

By ahmedebeed555AeroArduinoFollow

More by the author:

About: DIY my way through life. For me, Instructales is a way of living. It’s my making log. My life is counted with the instructables I make.

More About ahmedebeed555 »

The actual sit and write is the essence of being a writer. Just as in any other discipline, if you do not invest time, mind and effort in doing it, you are treating it to be just a hobby.

The mind you give to the process of writing comes back to you in a form of the Flow. The process of effortlessly create something valuable with ease and timelessness. It’s well known that whatever habit that you devote yourself to is what you can be finally rewarded for.

That’s why I’ve wanted to make this project to concentrate on the process of writing itself.

https://youtube.com/watch?v=vkdiyJ2i39c

Here is my Channel on Youtube:

Работа схемы

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

Напряжение +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. Поэтому если вы столкнулись с такой ошибкой, просто отключите клавиатуру на время загрузки программы.

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

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

Работа схемы

Схема подключения клавишной панели к плате 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.

Примеры

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

HelloKeypad

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

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

MultiKey

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

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

Step 1: The Story

Today I’m showing you how I’ve made this new project. Of course, it’s about Arduino and it’s about writing.

For some reason I wanted to connect Arduino to my keyboard.

Because I love writing on the keyboard.

It’s that real physical feeling of switches on my fingertips that makes me feeling creative and alive.

But there’s only a small problem. My favorite keyboard is happened to a USB keyboard.

Yes that’s the new modern technology is about and it’s something I should be happy with.

But the only problem I was having when I wanted to connect my keyboard to Arduino (as a host to my keyboard) I found that the standard use of Arduino with a keyboard is the PS2 connection.

Actually there is a good well written Arduino library for this purpose.

So how could I connect my USB keyboard to Arduino? I only remembered back then when I was looking for a keyboard for my notebook (which had no PS2 ports in it) is that I wanted to figure out some way to use a PS2 keyboard with a USB port but I couldn’t found this.

And that’s why I bought the USB keyboard for the first place.

But this search has helped me a lot these days when I wanted to connect my USB keyboard to Arduino.

I only then remembered that although I couldn’t use a normal PS2 keyboard with a USB port in a notebook because of the different protocol, but the opposite is doable.

I remembered that I’ve found an instructable that described building a USB to PS2 converter.

The writer mentioned that he has tried it and it worked.

This means that you can use a modern USB keyboard with your old PCs and laptops using only this converter.

It’s just a physical converter for the connection between the keyboard and the host port(not a voltage or protocol converter). That’s because the USB keyboard can be powered from the old PS2 port, take the CLOCK signal from it and then send DATA signal to it.

And the writer has tried to make this setup and it worked. Now it was my turn. When I looked for some information to connect a USB to an Arduino board I found that in order to do this I need either an Arduino USB shield or an Arduino board with Microcontroller that have the native USB host physical feature. Neither option were available to me.

So I’ve decided to try the physical USB to PS2 converter — the writer has tried with his PC — between my USB keyboard and Arduino. You know what? This one also worked.

Using the PS2 Arduino library we can connect the USB keyboard directly to Arduino boards such as Arduino UNO or Arduino Mini.

Библиотека Password

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

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

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

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

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

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

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

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

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

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

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…

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

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

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

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

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

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

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

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

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

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

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

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

Минусы

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

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

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

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

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

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

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

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

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

Плюсы

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

Минусы

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

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