Arduino как hid устройство

USB-Keyboard with Arduino

http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/

https://florianfries.me/en/arduino-as-a-keyboard.html

Arduino Keyboard Emulator *Updated*

http://robocraft.ru/blog/1002.html Посте того, как сгорел мой “ноутбук”, я вспомнил про свой старый системник (точнее материнку и блок питания). Достав его из кучи барахла, заметил что кроме мышки нету никакого устройства ввода, немного посидел,и начал рыть инет. Так как у меня в асоррименте только Arduino UNO R3 смотрел статьи только с ней. Многие делают клавиатуру на Arduino micro (ну там все просто). В поисках наткнулся на статью где ардуино играет в 2048. Так как для упавления игрой надо нажимать клавиши, нужно превратить ардуино в клавиатуру.То что надо!

Нам понадобится:

  • Arduino UNO R3
  • Перемычка
  • Arduino IDE
  • Фирменная утилита Atmel – Flip
  • Архив с прошивками и примером + библиотека

Цель: написать скетч для Arduino UNO, который будет эмулировать нажатие клавиш стрелок на клавиатуре.
Алгоритм наших действий:

  • Пишем скетч с нужным функционалом и заливаем в МК ATmega328
  • Прошиваем загрузчик Arduino, usb контроллер ATmega16U2

Для эмулирования нажатий клавиш я использовал библиотеку HIDKeyboard. Что ж теперь переходим к самому интересному – будем превращать Arduino UNO в HID устройство, а конкретней в USB клавиатуру.

Немного теории.

Прошивка загрузчика — для начала нужно перевести Arduino в режим Device Firmware Update или в более часто используемом варианте DFU. Он служит для перепрошивки контроллера выполняющего роль конвертера serial to usb.

Как известно, основное отличие Arduino UNO от предыдущих моделей плат Arduino заключается в наличие второго контроллера ATmega8U2, на смену аппаратному конвертору USB COM (FT232R).

Преимуществом данного решения является возможность замены прошивки в интерфейсном контроллере с целью эмуляции произвольного устройства при подключении Arduino к ПК (накопителя, hid-устройства и т.д.). Как это сделать? У интерфейсного контроллера имеется режим DFU – прошивка контроллера ATmega8U2 через подключение через USB.

Почти как прошивка центрального контроллера Arduino. Для этого можно воспользоваться фирменной утилитой Flip. Для того чтоб перевести контроллер в этот режим программирования потребуется небольшая аппаратная модернизация Arduino.

Для  Arduino UNO R3 достаточно поставить перемычку.

После этих действий компьютер обнаружит новое устройство и попытается самостоятельно поставить драйвера, но у него ничего не получится. Настало время установить фирменную утилиту Flip от Atmel. Открываем диспетчер задач и видим новое устройство Arduino Uno DFU. Выберем драйвер из папки недавно установленной утилиты FLIP. В итоге у нас появится новое устройство – ATmega16U2. В дальнейшем при подключении Arduino, устройство будет определять как USB устройство. Теперь нам следует залить HEX файл с инструкциями USB клавиатуры. Чтоб компьютер в дальнейшем распознавал нашу Arduino как usb клавиатуру. Запускаем FLIP.

  • Выбираем в меню Device > Select > ATmega16U2
  • Выбираем в меню Setting > Communication > USB
  • Жмем Open берем прошивку
  • Приступаем к прошивке, жмем Run

По окончании процесса прошивки можно закрыть программу и проверить, как работает устройство. В итоге мой Arduino успешно играл в 2048 почти неделю. Даже на ночь его не выключал. В подтверждение вот мой результат.
Вот так можно превратить Arduino UNO в HID-устройство. Кстати можно не только играться в игры но и разыграть друга, подключив к его компьютеру устройство, которое запустит блокнот и будет писать там анекдоты, либо запускать команды, ведь клавиатура это главный пульт управления компьютером. К сожалению нельзя применить этот метод к плате Arduino Nano. Как уже говорилось ранее – второй контроллер Arduino UNO (ATmega8U2) используется в роли конвертера USB to Serial для определения компьютером Arduino UNO как USB устройство. Можно сделать вывод: реализовать этот метод, без посторонних устройств, возможно лишь при наличии на плате Arduino микроконтроллера запрограммированного как USB-to-serial конвертер. Но что делать, если у вас Arduino Nano или иная плата без конвертера USB to Serial? В таком случае можно купить отдельно конвертер подобный этому. Чтобы вернуть Arduino UNO к жизни надо перепрошить ATmega16U2 Найти прошивку можно тут: На всякий случай собрал весь софт который использовал в   – Arduino-HID-Bot-2048.ino – Скетч для Arduino UNO для игры в 2048.       – Arduino-keyboard.hex       – этот hex файл заливаем при помощи FLIP для перевода arduino в режим USB клавиатуры (но сначала нужно залить основной скетч).

прошиваем вот так!

шьем по isp делаем клавиатуру avrdude -p m16 -b 19200 -F -P COM4 -c avrisp -U flash:w:Arduino-keyboard-0.3.

hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m “-p m16” это код atmega16u2 делаем копию arduino uno R3 avrdude -p m328p -b 19200 -c avrisp -P COM13 -e -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex       – Arduino-usbserial-uno.

hex – этот файл нужен для того чтоб обратно вернуть Arduino UNO в стандартный режи работы, чтоб она определялась в ПК как виртуальный COM-порт в котром мы можем загружать скетчи. 

https://vk.com/doc5127466_437873517

http://www.atmel.com/tools/FLIP.aspx

 Дополнительно:  http://pythoneiro.blogspot.ru/2015/04/transformando-seu-arduino-uno-em-um-usb.html

Источник: http://hp0n.blogspot.com/2016/09/usb-keyboard-with-arduino-and-v-usb.html

Arduino USB HID Keyboard – MitchTech

126

Turn your Arduino UNO into a USB HID keyboard, and make buttons that do whatever you want. Make it a useful tool, with new buttons for Cut/Copy/Paste or Volume+/Volume-/Mute, or annoy your friends and colleagues by setting the keyboard to perform random keypress after random delays!

The USB HID keyboard conforms to the standard USB specification, so is functional on all modern operating systems.  All this is made possible by the use of the Arduino Device Firmware Update (DFU) function.

Arduino Device Firmware Update (DFU)

The Atmega8U2 chip on the Arduino UNO can be programmed directly using the special USB protocol called Device Firmware Update (DFU). This is completely independant of the ‘normal’ method of flashing sketches to the board using the Arduino IDE.

This process is normally used to update the firmware to a more recent version, as explained in the offical Arduino guide, Updating the Atmega8U2 on an Uno or Mega2560 using DFU. Note: If your board is NOT an Arduino UNO SMD you’ll need to solder a 10k resistor (Brown-black-orange) at the back of your board as shown on the Arduino site.

However, in addition to the ability to flash standard USB Serial firmwares, we can also flash alternative firmwares as well.

This allows the device to be recognized as many other device types, including keyboard, mouse, joystick, midi device, etc.

This is made possible in part to the wonderful open source LUFA (Lightweight USB Framework for AVRs)  USB stack, and keyboard HID firmware from Darran.

In this demonstration, we will flash generic USB HID keyboard firmware. The USB HID protocol provides manufactures the generic specifications to interact with nearly every operating system in existence. For more info, check out the USB HID Spec sheet.

Before you start, install the required packages. On Ubuntu and Debain systems, in a terminal run:

For Windows and Mac instructions to install the dfu-programmer tool, consult the official Arduino DFU documentation.

Then download these two firmware files:

The first step is to make sure you are able to flash the standard arduino firmware. This will confirm that the programmer and the environment are both functional. NOTE: There is no chance of ‘bricking’ the device using this method. The Arduino bootloader firmware can always be updated using the DFU protocol!

Plug cycle the Arduino, then open the Arduino IDE and ensure that you can still upload a sketch. Assuming everything flashes normally, we can move forward with flashing the HID keyboard firmware.

NOTE: The Arduino can only be flashed with skectches through the Adruino IDE if the Arduino-usbserial.hex bootloader is active. So, to develop a USB HID device, the process becomes:

Now that you understand how the process works, you can try out some of these keyboard samples. The easiest example is the random keypress with random delays, since it doesn’t require any components connected to the Arduino.

Random Key/Random Delay

The following two examples both use three buttons connected to the Arduino. The code can easily be changed to make the buttons perform other actions, by consulting the mapping tables in the USB HID documentation.  Here is a diagram of the circuit, (created with Fritzing):

Volume+/Volume-/Mute

Cut/Copy/Paste

Источник: http://mitchtech.net/arduino-usb-hid-keyboard/

Плата расширения USB Host Shield

 Плата расширения USB Host Shield 2.0 позволяет Arduino выступать в роли родительского USB-устройства для практически любой имеющейся USB-периферии. С этой платой открывается масса новых возможностей для создания интересных устройств. В настоящее время платой USB Host Shield 2.0 поддерживаются следующие классы устройств:

 HID-устройства, такие как клавиатуры, мыши, джойстики и др.;

 игровые устройства: Sony PS3, Nintendo Wii, Xbox360;

 USB преобразователи: FTDI, PL-2303, ACM, а также некоторые аппараты и GPS-приемники;

 Android -устройства;

 цифровые фотоаппараты: Canon (EOS, PowerShot), Nikon.

Для программирования USB Host Shield используется специальная библиотека, скачать которую можно со страницы https://github.com/felis/USB_Host_Shield_2.0.

Спецификацию и примеры использования этой библиотеки можно найти на сайте Circuits@Home http://www.circuitsathome.com/arduino_usb_host_shield_projects.

  USB Host Shield 2.0

Интерфейс USB

Последовательный интерфейс USB используется для подключения периферийных устройств. Соответственно, существуют понятия “главное устройство” — хост (он управляет обменом данными через интерфейс, выступает инициатором обмена) и “периферийное устройство” — клиент (в процессе обмена данными он “подчиняется” хосту).

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

Хабы также применяются для “разветвления” шины USB.

Физически интерфейс USB (до версии 2.0) использует 4 провода

 “земля” (GND);

 +5 В (VBUS);

 D–, D+ — линии приема/передачи данных (обозначения D+ и D– условны, с электрическими потенциалами это никак не связано).

Спецификация USB 1.0 определяла два типа разъемов: A — на стороне контроллера или концентратора USB и B — на стороне периферийного устройства. Впоследствии были разработаны миниатюрные разъемы для применения USB в переносных

Назначение контактов USB 1.0, USB 2.0

и мобильных устройствах, получившие название Mini-USB. Новая версия миниатюрных разъемов, называемых Micro-USB, была представлена USB Implementers Forum 4 января 2007 года.

Благодаря встроенным линиям питания USB позволяет подключать периферийные устройства без собственного источника питания (максимальная сила тока, потребляемого устройством по линиям питания шины USB, не должна превышать 500 мА, у USB 3.0 — 900 мА).

Стандарт USB поддерживает концепцию plug-and-play. Эта концепция подразуме- вает, что пользователю достаточно “воткнуть” устройство в соответствующий порт ПК.

Дальше ОС автоматически определит тип подключенного устройства, найдет подходящий для данного устройства драйвер, сконфигурирует устройство и т. д.

Для того чтобы это все работало, стандартом USB предусмотрены некие общие требования для всех устройств:

 каждое устройство содержит дескриптор (описание) устройства;

 есть общий для всех USB-устройств механизм, который позволяет ОС прочитать дескриптор устройства для того, чтобы идентифицировать устройство, узнать его характеристики;

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

 HID-устройства USB

HID (Human Interface Device) — устройство, подключаемое к вычислительной технике, с тем, чтобы с ней мог работать человек. Говоря проще, HID — это устройство ввода информации.

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

HID-устройства ввода различаются по типу вводимой информации:

 для текстовой информации — это преимущественно клавиатуры. Они служат для управления техническими и механическими устройствами (компьютер, калькулятор, кнопочный телефон).

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

В клавиатурах такого типа клавиши сопровождаются наклейками с изображением символов или действий, соответствующих нажатию;

 для звуковой информации — это микрофон. Электроакустические приборы, преобразующие звуковые колебания в колебания электрического тока, используются во многих устройствах (телефоны и магнитофоны, приборы звукозаписи и видеозаписи на радио и телевидении, для радиосвязи);

 для графической информации:

• сканер — устройство для считывания плоского изображения и представления его в растровой электронной форме;

• цифровая камера — устройство (фотоаппарат), использующее массив полупроводниковых светочувствительных элементов (матрицу), на которую изображение фокусируется с помощью системы линз объектива. Полученное изображение сохраняется в электронном виде в памяти самой камеры или же дополнительном цифровом носителе;

• веб-камера — цифровая видео- или фотокамера, способная в реальном времени фиксировать изображения, предназначенные для дальнейшей передачи по сети Интернет как в потоковом режиме, так и за определенные промежутки времени;

• плата захвата (тюнер) — электронное устройство для преобразования аналогового видеосигнала в цифровой видеопоток. Используется для захвата телесигнала, сигнала с камер видеонаблюдения и др.

HID-устройства управления различаются по функционалу:

 относительное позиционирование (обрабатывают информацию о перемещении):

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

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

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

• тачпад — сенсорная панель, применяемая, в основном, в портативных ком- пьютерах. В отличие от трекпойнта, считывающего давление пальца, тачпад считывает емкостные характеристики при соприкосновении пальца с поверхностью емкостных датчиков. Поэтому управление тачпадом с помощью непроводящих предметов (ручка, карандаш, стилус) достаточно проблематично;

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

 абсолютное позиционирование (высчитывают абсолютные координаты на плоскости, в качестве которой выступает устройство):

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

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

Отдельно хочется выделить специальные HID-устройства для компьютерных игр:

 игровые мыши — отличаются от обычных компьютерных мышей высокой чувствительностью, настраиваемым весом, большим количеством программируемых кнопок;

 кейпады — специальные игровые клавиатуры-приставки, в которых кнопки скомбинированы для максимального удобства игрока (в современные модели встраивается мини-джойстик);

 руль и педали — манипуляторы для игр жанра “автогонки” (рэйсинг);

 джойстики — используются для игр жанра “авиасимуляторы”;

 геймпады — специальные игровые манипуляторы, используемые в аркадных жанрах (перешли с игровых консолей);

 танцевальные платформы — специальные платформы с датчиками давления. Управление производится с помощью ног. Используются для игр жанра “танцевальные аркады”;

 музыкальные инструменты (гитары, барабаны) — специальные манипуляторы в форме музыкальных инструментов с кнопками и датчиками давления. Используются для игр жанра “музыкальные аркады”.

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

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

Однако кроме требований, которые относятся ко всем USB-устройствам, устройства HID выдвигают ряд дополнительных требований:

 HID-устройство должно иметь Interrupt In — конечную точку для выдачи данных в хост. Interrupt Out — конечная точка для получения периодических данных от хоста, является опциональной и может не использоваться;

 HID-устройство должно содержать дескриптор класса — Device Class Descriptor и один или более дескрипторов репорта HID Report Descriptor;

 HID-устройство должно поддерживать специфический для класса управляющий запрос Get_Report, а также опционально поддерживать дополнительный запрос Set_Report;

 для передачи Interrupt In (данные из устройства в хост) устройство должно положить данные репорта в FIFO соответствующей конечной точки и разрешить передачу;

 для передачи Interrupt Out (данные из хоста в устройство) устройство должно разрешить соответствующую конечную точку Out, а затем, после прихода пакета, забрать данные из FIFO.

 

В библиотеке USB Host Shield 2.0 имеется пример для подключения к Arduino HID-мыши USB — USBHIDBootMouse.pde. Загружаем его и смотрим в мониторе по- следовательного порта результат работы скетча.

Скетч для подключения HID-мыши USB

Использование HID-устройства (руль Defender) для управления роботом

Теперь создадим собственный проект. Будем управлять роботом с помощью игрового манипулятора — руля Defender Forsage Drift GT. Для этого необходимо организовать беспроводное управление моделью робота данным устройством. Для беспроводной передачи данных воспользуемся беспроводным радиомодулем NRF24L01.

Руль подсоединен к плате Arduino через USB Host Shield. В качестве блока управления подсоединяем к Arduino модуль 2,4 ГГц NRF24L01.  Дополнительно к Arduino робота подключаем такой же радиомодуль 2,4 ГГц NRF24L01. Электрическая схема блока робота представлена на рисунке.

Электрическая схема блока робота

Загружаем скетч USB_HID_Desc.pde, входящий в примеры библиотеки USB_Host, подсоединяем к Arduino через USB Host Shield наш руль и получаем Descriptor Report HID-устройства

Скетч получения Descriptor Report HID-устройства

Usage Page Gen Desktop Ctrls(01) Usage Game Pad

Collection Application Collection Logical Report Size(08)

Report Count(04) Logical Min(00) Logical Max(FF00) Physical Min(00) Physical Max(FF00) Usage X

Usage Y Usage Z Usage Z Usage Rz

Input(00000010)

Report Size(04)

Report Count(01) Logical Max(07) Physical Max(3B01) Unit(14)

Usage Hat Switch Input(01000010)

Unit(00) Report Size(01)

Report Count(0C) Logical Max(01) Physical Max(01) Usage Page Button(09) Usage Min(01)

Usage Max(0C) Input(00000010)

Usage Page Undef(00) Report Size(08) Report Count(02) Logical Max(01) Physical Max(01) Usage Input(00000010)

End Collection Collection Logical Report Size(08) Report Count(04) Physical Max(FF00) Logical Max(FF00) Usage Output(00000010) End Collection End Collection

Для создания своего кода возьмем код примера, входящий в библиотеку USB_Host и реализующий функционал джойстика, а именно USBHIDJoystick.pde, и перепишем файлы hidjoystickrptparser.h  и hidjoystickrptparser.cpp  для сохранения данных в структуре. Далее добавим отправку данных руля по радиоканалу с помощью библиотеки для NRF24L01  Отправку производим каждые 300 мс.

#if !defined( HIDJOYSTICKRPTPARSER_H )

#define HIDJOYSTICKRPTPARSER_H

#include<\p>

#include<\p>

#include “avrpins.h”

#include “max3421e.h”

#include “usbhost.h”

#include “usb_ch9.h”

#include “Usb.h”

#if defined(ARDUINO) && ARDUINO >=100

#include “Arduino.h”

#else

#include<\p>

#endif

#include “printhex.h”

#include “hexdump.h”

#include “message.h”

#include “confdescparser.h”

#include “hid.h”

struct GamePadEventData

{

uint8_t X, Y, Z1, Z2, Rz;

};

class JoystickEvents

{

public:

virtual void OnGamePadChanged(const GamePadEventData *evt); virtual void OnHatSwitch(uint8_t hat);

virtual void OnButtonUp(uint8_t but_id); virtual void OnButtonDn(uint8_t but_id);

uint8_t X; uint8_t Y; uint8_t Z1; uint8_t Z2; uint8_t Rz;

};

#define RPT_GEMEPAD_LEN 5

class JoystickReportParser : public HIDReportParser

{

JoystickEvents *joyEvents;

uint8_t oldPad[RPT_GEMEPAD_LEN];

uint8_t oldHat;

uint16_t oldButtons;

public:

};

JoystickReportParser(JoystickEvents *evt);

virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);

#endif // HIDJOYSTICKRPTPARSER_H

#include “hidjoystickrptparser.h”

JoystickReportParser::JoystickReportParser(JoystickEvents *evt) : joyEvents(evt),

oldHat(0xDE), oldButtons(0)

{

for (uint8_t i=0; iOnButtonDn(i+1);

else

}

joyEvents->OnButtonUp(i+1);

oldButtons = buttons;

}

}

void JoystickEvents::OnGamePadChanged(const GamePadEventData *evt)

{

X=evt->X; Y=evt->Y; Z1=evt->Z1; Z2=evt->Z2;

Rz=evt->Rz;

}

void JoystickEvents::OnHatSwitch(uint8_t hat)

{

Serial.print(“Hat Switch: “); PrintHex(hat); Serial.println(“”);

}

void JoystickEvents::OnButtonUp(uint8_t but_id)

{

Serial.print(“Up: “); Serial.println(but_id, DEC);

}

void JoystickEvents::OnButtonDn(uint8_t but_id)

{

Serial.print(“Dn: “); Serial.println(but_id, DEC);

}

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#include “hidjoystickrptparser.h”

#include<\p>

#include<\p>

#include<\p>

#include<\p>

USB Usb;

USBHub Hub(&Usb); HIDUniversal Hid(&Usb); JoystickEvents JoyEvents;

JoystickReportParser Joy(&JoyEvents);

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#define MAX_BUFF 32 // Буфер приема-передачи

void setup()

{

Serial.begin( 115200 ); Serial.println(“Start”); if (Usb.Init() == -1)

Serial.println(“OSC did not start.”); delay( 200 );

if (!Hid.SetReportParser(0, &Joy)) ErrorMessage(PSTR(“SetReportParser”), 1 );

Mirf.spi = &MirfHardwareSpi; Mirf.init();

Mirf.setRADDR((byte *)”defender”); // Здесь задаем адрес Mirf.payload = MAX_BUFF; // Здесь задаем буфер Mirf.channel = 10;

// Это канал приема-передачи – должен

// быть одинаковым у устройств. Mirf.config(); Serial.println(“Start..”);

}

char buff[MAX_BUFF]; int c_count = 0;

void loop()

{

Usb.Task(); buff[0]=map(JoyEvents.X,0,255,1,100); buff[1]=map(JoyEvents.Y,0,255,1,100);; buff[2]=map(JoyEvents.Z1,0,255,1,100); buff[3]=map(JoyEvents.Z2,0,255,1,100); buff[4]=JoyEvents.Rz+1;

buff[5]=0;

Mirf.setTADDR((byte *)”automobile1″); //Адрес! Serial.print(“>”);

Mirf.send((uint8_t *)buff); while(Mirf.isSending()){

}

Serial.println(buff); delay(300);

}

Теперь необходимо написать скетч приема данных и отправки команд двигателям робота. Первый байт из буфера данных: влево (0–50) — вправо (51–100), второй байт: вперед (51–100) — назад (1–50). Надо только правильно перевести байты в данные для микросхемы L293. Полученный скетч представлен в примере.

#include<\p>

#include<\p>

#include<\p>

#include<\p>

#define MAX_BUFF 32 // Буфер приема-передачи

void setup(){ Serial.begin(9600);

Mirf.spi = &MirfHardwareSpi; Mirf.init();

Mirf.setRADDR((byte *)”automobile1″); // Здесь задаем адрес Mirf.payload = MAX_BUFF; // Здесь задаем буфер Mirf.channel = 10;

// Это канал приема-передачи – должен

// быть одинаковым у устройств. Mirf.config();

// настраиваем выводы для моторов pinMode(3, OUTPUT);

pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); Serial.println(“Start..”);

}

char buff[MAX_BUFF];

void loop(){ delay(10);

//receiving if(Mirf.dataReady()) { Mirf.getData((uint8_t *)buff); int fb1=buff[0];

int lr=buff[1]; go12(fb1,lr1);

}

delay(100);

}

//

void go12(int fb,int lr)

{

// вперед-назад if(fb>50)

{digitalWrite(3,HIGH);digitalWrite(4,LOW); digitalWrite(5,HIGH);digitalWrite(6,LOW);}

else if(fb

Источник: http://www.progdron.com/ru/arduino-shield/arduino-shield/367-plata-rasshireniya-usb-host-shield

как подключить USB клавиатуру к Arduino nano (uno и другие)

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

Действия производимые при помощи клавиатуры должны быть озвучены. При правильном вводе пароля необходимо произвести некую коммутацию сигналов (проще говоря включить реле).

Решена с помощью USB Host shield и библиотеки для Arduino TV-Out.

Задачу я разбил на 2 подзадачи

  1. Вывод изображения на экран
  2. Ввод данных с клавиатуры.

Первую задачу я знал как решить, так как уже доводилось сталкиваться с библиотекой вывода ЧБ изображения на экран при помощи Arduino. Так же библиотека позволяет вывести звук определенной частоты и, при необходимости, длительности. 

Библиотеку использовал отсюда , файл TVout_w_audio.zip. 

Схема подключения

Замечу что в данной библиотеке использован вывод D8 для вывода изображения, вместо D7 как на сайте Arduino.

Интерфейс получился примерно такой:

Так же во время написания программы столкнулся с тем что при выводе текста в одну строку но по частям, или с использованием команды вывода текста на экран – получал ошибку компиляции. Например слово “LOGIN:” я вывожу одним оператором, а буквы введенные с клавиатуры этим же оператором только в следующей строке.

Библиотека с сайта Arduino имеет функционал шире, но при этом так и не понял как избавиться от ошибки компиляции. В приведенной выше библиотеке с выводом изображения все ок.

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

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

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

Самый простой способ подключить клавиатуру к ардуино это использовать интерфейс PS/2 и соответствующую библиотеку которая с легкостью гуглиться. Но клавиатур PS/2 значительно меньше (2017год на дворе как ни как 🙂  ), а клавиатура будет использоваться в жестких условиях. решил остановиться на USB клавиатуре. 

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

И тут я вспомнил что недавно заказал у китайцев USB HOST shield на микросхеме MAX3421E. Когда я покупал эту штуку я даже не представлял на сколько велик ее потенциал 🙂 

Шилд подключается необычным для меня образом через разъем ICSP.

Причем Если reset дублируется и на основных выводах платы ардуино, то на шилд заходит только через панельку ICSP. Как я понимаю это связано с тем что плату можно переключать на 3,3В и на 5В логику. И трансляция в моем случае 5В логики ардуино на 3,3В для контроллера УСБ шилда производится как раз через ICSP.

По этому привожу схему по которой я подключил шилд к своему контроллеру.

Библиотека и информация по работе с шилдом есть на сайте ардуино. Библиотеку можно скачать здесь.

С библиотекой идет куча величайшая примеров. Я взял этот пример:

Убрал из него обработку ненужных мне клавиш. Оставил лишь буквы, цифры, и стрелки курсора.

Пример написан очень аккуратно и понятно что за что отвечает. 

Коды полученые с клавиатуры транслируются через последовательный порт на контроллер который выводит видео. 

Код программы которая опрашивает клавиатуру через шилд 

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 #include<\p>#include<\p>#ifdef dobogusinclude#include<\p>#include<\p>#endifclass KbdRptParser :public KeyboardReportParser{  protected:    void OnKeyDown  (uint8_t mod, uint8_t key);};void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key){  Serial.write(key);}USB     Usb;HIDBoot    HidKeyboard(&Usb);uint32_t next_time;KbdRptParser Prs;void setup(){  Serial.begin( 115200 );#if !defined(__MIPSEL__)  while (!Serial);#endif  if (Usb.Init() == -1)  {      while(1)          {              Serial.write(200);              delay(500);          }  }  delay( 200 );  next_time = millis() + 5000;  HidKeyboard.SetReportParser(0, &Prs);}void loop(){  Usb.Task();}

И так все удалось, клавиши с любой УСБ клавиатуры распознаются и передаются в контроллер видео для последующего вывода на экран.

Источник: http://www.guslab.com.ua/2017/01/usb-arduino-nano-uno.html

Резистивная клавиатура на Arduino

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

1. Аппаратная часть

Для реализации данного проекта нам понадобится любой контроллер Arduino на чипе ATmega32u4. Этот микроконтроллер позволяет делать HID устройства.

Вариант для домашнего использования как с планшетом или телефоном так и с компьютером

Подойдёт и более компактный вариант от RobotClass, подходящий для встраиваемой установки. Например, в автомобиль — для управления планшетом.

Так же будет нужен набор резисторов различного номинала (к примеру 10 кОм)

и набор кнопок

Количество кнопок и резисторов зависит от того, сколько требуется сделать кнопок.

2. Программа и схема

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

После сборки схемы получаем

После подключаем контроллер к компьютеру и загружаем в плату следующий скетч

byte key(){     int val = analogRead(0); // считываем значение с аналогового входа и записываем в переменную val     if (val < 50) return 1; // сверяем переменную, если val меньше 50 возвращаем 1 (первая кнопка)     else if (val < 150) return 2; // если val меньше 150 вторая кнопка     else if (val < 350) return 5; // если val меньше 350 третья кнопка     else if (val < 500) return 4; // если val меньше 500 четвертая кнопка     else return 0;   } void setup() { Serial.begin(9600); } void loop() {   int sensorValue = analogRead(A0); //считываем кнопку   Serial.print(key()); // выводим номер кнопки в serial   Serial.print(" ");   Serial.println(sensorValue);   delay(1);        }

После того, как загрузили скетч, открываем «Монитор порта» и нажимая на кнопки  видим их значения в мониторе порта .

3. Программа для управления Android устройством на Ардуино

Теперь попробуем сделать клавиатуру для управления планшетом или телефоном на базе Android. Схема устройства остается та же, что и была. Но теперь контроллер будет распознаваться устройством как USB HID, в нашем случае клавиатурой.

Загружаем следующий скетч:

int analogPin=0;  int data;  void setup(){  Keyboard.begin();     Serial.begin(9600);  }  void loop(){     data=analogRead(analogPin); //чтение нажатой кнопки     Serial.println(data); // вывод кода нажатой кнопки в монитор порта      if (data==614)  Keyboard.write(176); //ENTER код 614     if (data==122)  Keyboard.write(216); //стрелка влево     if (data==165)  Keyboard.write(215); //стрелка вправо     if (data==216)  Keyboard.write(218); //стрелка вверх     if (data==276)  Keyboard.write(217); //стрелка вниз     delay(100);  }

Теперь Android устройство распознает нашу клавиатуру, и мы можем управлять, например, медиаплеером 

4. Заключение

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

Изменено: 25 Апр, 2018 17:41

Источник: http://robotclass.ru/articles/arduino-resistive-keyboard/

Arduino как HID устройство – Видео уроки

9 меc назад

People say it was not possible to connect an Arduino to HDTV with HDMI. It is not true. Now it is the HDMI Shield for Arduino, mbed, and your MCUs. Full source code available on GitHub : https://github.com/techtoys/HDMI-Shield/tree/master/Ra8876_Lite

2 лет назад

Скетч: https://vk.com/doc-59113254_439234351 Коды клавиатуры: https://www.arduino.cc/en/Reference/KeyboardModifiers Коды мыши: https://www.arduino.cc/en/Reference/MouseClick

3 лет назад

This tutorial shows Windows users how to MIDI hack their Arduino Uno. PLEASE NOTE: THIS IS ONLY FOR GENUINE ARDUINO UNO R3s AND CLONES USING 16U2 USB PROCESSOR (this is the processor next to the USB socket, not the main processor).

2 лет назад

Blaupunkt CD30 MP3 keyboard emulation by arduino leonardo for my carpc project

5 лет назад

This video demonstrates HID-class serial communication for AVR microcontrollers using the V-USB library (a software-based USB implementation). The details of the project can be found at http://rayshobby.net/?p=7363.

It works for most AVRs that do not have hardware USB support. The code is implemented as an Arduino library, and the host software is written in Processing.

It is cross-platform and looks similar to a standard serial monitor.

2 лет назад

Нарисованная сенсорная кнопка для Ардуино (Drawn a touch button for Arduino) Для рисования кнопки необходим простой графитовый карандаш,желательно мягкий. ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰ Скачать программное обеспечение Ардуино (The Arduino software) https://www.arduino.

cc/en/Main/Software ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰ Библиотека (Library) – https://yadi.sk/d/xaveEQ2GvKqrg Скетч (Sketch) – https://yadi.sk/i/X6IdKLwJvKqxe ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰ Arduino UNO – http://ali.pub/64j7k Arduino Nano – http://ali.pub/e9vzw Резисторы 1 мОм – http://ali.

pub/iv9at ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰ (Return to 18% of sales) Возвращайте до 18% с покупок – https://goo.gl/moYRGM

2 лет назад

Топ10 подборка самых необычных компьютерных мышек ПОДПИШИСЬ НА НОВЫЕ ВЫПУСКИ ►www.youtube.com/c/poleznaniy Геймерская мышь Mad Catz Cyborg R.A.T.

7 Мышь-калькулятор Canon X Mark I Mouse Миниатюрная Swiftpoint Мышка Amenbo Мышь-геймпад Chameleon X-1 Перчатка Air Mouse Cool Ring-Style Fingertip USB Optical Mouse Мечта 3D-дизайнеров Space Mouse Pro Браслет Hillcrest Labs Loop Необычная Axsotic 3D Spherical Mouse Copyright Owner (Created by): «Awards Media Group Limited Partnership» http://www.dewolfemusic.com/trackdetail.php#!/?id=6950690&code=pPXRH7

2 лет назад

Как ОБМАНУТЬ игровой автомат: ардуино мега, взлом игрового автомата с помощью ардуино! В этом видео я сделал толкатель для того, чтобы играть в автомат с…. ТОЛКАТЕЛЕМ! Суть видео в том, чтобы показать как можно (нельзя) ПОПРОБОВАТЬ обыграть зловещий игровой автомат!

2 лет назад

This is part 1 of the HID Relay project assembly. In this installment, we'll cover modding the USB Host shield to accept 3.3V for the logic and 5V for the USB Bus, and then soldering it to a 3.3V Arduino Pro Mini.

Finally you'll test it with a USB keyboard to make sure it's working properly at this stage. In Part 2 we'll mount this Arduino sandwich onto perfboard with some female headers, then create a “shield” for the HID-modded HC-05 bluetooth module to plug into the USB/Arduino base.

Finally we'll write the HID Relay firmware Software Links: http://arduino.cc https://github.com/felis/USB_Host_Shield_2.0 Announcement Video for the HID Relay: https://www.youtube.

com/watch?v=L7lEDS6xj5w ** I just discovered I exported about a minute and a half of empty video after the last scene. The info is done after that blue screen goes away. There's no after-credits scene, I promise.

** The music I used in the background: Hep Cats by Kevin MacLeod is licensed under a Creative Commons Attribution license (https://creativecommons.org/licenses/by/4.0/) Source: http://incompetech.com/music/royalty-free/index.html?isrc=USUAN1500022 Artist: http://incompetech.com/

2 лет назад

Не работает кнопка повышения температуры

2 лет назад

В этом видео я покажу, как сделать самодельный модуль радиоуправления (CCU R0). Этот модуль может управлять четырьмя электродвигателями и тремя сервоприводами, в модуле используется приёмопередатчик NRF24L01, драйверы двигателей L293D и плата Ардуино нано.

Этот модуль может управлять различными моделями машинок, танков, кораблей, самолётов и роботами. =================================================== Наша группа ВК https://vk.com/club125729960 ОБСУКЖДЕНИЕ ПРОБЛЕМ СВЯЗАНЫХ С МОДУЛЕМ CCU ТУТ!!!! https://vk.

com/topic-125729960_34702541 ==================================================== Схема CCU R0 https://yadi.sk/d/Qs_RZDQh33wbDB Схема пульта для CCU R0 https://yadi.sk/i/NxMhaABI39rnBy Урок как читать схемы https://www.youtube.com/watch?v=KuG7QpKvmV8 ==================================================== Библиотека RF24-master https://yadi.

sk/d/RsjMt9S733xCPD Скетч CCU R0 https://yadi.sk/d/L79UFory33wjKH Скетч пульта CCU R0 https://yadi.sk/d/_pJiBtXq33wjPm Уроки ардуино https://www.youtube.com/watch?v=q2tvWvcjfdc ==================================================== Ссылки на детали. 1) Arduino NANO CH340, на МК(MEGA328p)http://ali.pub/8ejap 2) Джойстик для Arduino http://ali.

pub/begiz 3) Li-ion аккумуляторы 18650 http://ali.pub/9sqpa http://ali.pub/zj5lo http://ali.pub/0ek6x 4) Боксы для аккумуляторов 18650 http://ali.pub/ku3mt 5) Радио модуль NRF24L01+ http://ali.pub/h7jpg 6)Радио модуль NRF24L01 с антенной http://got.by/ea2mu 7) Сервопривод SG90 http://ali.pub/1sttj7 8) Гребёнка однорядная 40 PIN папа http://ali.

pub/sdnm1 9) Гребёнка однорядная 40 PIN мама http://ali.pub/0euyn 10) Панелька под микросхему 16 pin http://ali.pub/z7gmb 11) Макетная плата 3х7см http://ali.pub/yzfl4 12) Драйвер L293D http://ali.pub/rdw7g 13) Конденсаторы керамические 0,1 мкФ http://ali.pub/1fmzh 14) Конденсаторы электролитический 10х25 В http://ali.

pub/vwxgl ======================================================== ИНСТРУМЕНТ И ВСПОМОГАТЕЛЬНЫЕ МАТЕРИАЛЫ. 1) Коврик для пайки огнеупорный силиконовый http://ali.pub/pszaq 2) Коврик зелёный на столе называется (CUTTING MAT) http://ali.pub/p0zxa 3)Держатель “третья рука” с лупой http://ali.pub/6t4om 4) Припой с флюсом http://ali.

pub/rh8up ===================================================== Отблагодарить автора за его труд, чертежи и уроки:) Яндекс.Деньги 410014334017254 https://money.yandex.ru/to/410014334017254 WebMoney (Z343563415592; R350733365372) Bitcoin – 1ET2cmbjsKCMP98dKNj7NxqnR9T9djgqPd

2 лет назад

Источник: https://videouroki.su/watch/Arduino-kak-HID-ustroystvo/Ly0pzq6vGPQ

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}