Arduino USB HID klávesnice a myš

USB HID (Human Interface Device) je rozšířená funkce některých Arduino desek. Tato vlastnosti nám dovoluje nastavit Arduino tak, aby se chovalo v počítači jako připojená USB klávesnice či myš. Mezi podporovaná Arduina patří například desky s čipem Atmega32U4, tedy Arduino Leonardo, Micro či Pro Micro, anebo také Arduino Due.

Pro ukázku zde uvedenou jsem si k desce Arduino Micro připojil tlačítko s pull-down odporem. Pro úspěšné propojení tedy stačí propojit pouze 3 piny. Propojíme pin VCC s jedním pólem tlačítka, pin D9 s druhým pólem tlačítka a mezi druhý pól a zem připojíme pull-down rezistor. Rezistor může mít libovolnou velikost, typicky se používá odpor v rozmezí 1k – 10 k ohmů. Pro datový pin D9 můžeme zvolit také jiný volný pin, ale je nutné tuto volbu provést také na začátku programu.

Ukázkový kód obsahuje na svém začátku připojení dvou potřebných knihoven a nastavení pinu tlačítka.
V podprogramu setup provedeme postupně zahájení komunikace po sériové lince, dále aktivujeme HID funkci klávesnice a poté HID funkci myši. Posledním příkazem pak nastavíme pin tlačítka jako vstup.
Nekonečná smyčka loop obsahuje uvnitř jeden příklad s využitím klávesnice a druhý s využitím myši. Pro první příklad zkontrolujeme, jestli nebyly přes sériovou linku poslány nějaké znaky. Pokud se tak stalo, načteme vždy po jednom znaku do vnitřní proměnné, vytiskneme tento znak po sériové lince a následně zapíšeme znak s hodnotou o jedna vyšší skrze klávesnici zpět do počítače.
Druhá podmínka if kontroluje stav připojeného pinu na tlačítko. Pokud je tlačítko stisknuto, tedy má stav logické jedničky, tak nastavíme pohyb myši o +10 pixelů v ose X a o +5 pixelů v ose Y. A na konci podprogramu se nachází už jen pauza po dobu 100ms, po které se smyčka loop opakuje.

// Arduino USB HID klávesnice a myš

// připojení potřebných knihoven
#include "Keyboard.h"
#include "Mouse.h"
// nastavení čísla propojovacího pinu
#define tlacitko 9

void setup() {
  // inicializace komunikace po sériové lince
  // rychlostí 9600 baudů
  Serial.begin(9600);
  // inicializace USB HID klávesnice
  Keyboard.begin();
  // inicializace USB HID myši
  Mouse.begin();
  // nastavení pinu tlačítka jako vstupu
  pinMode(tlacitko, INPUT);
}

void loop() {
  // kontrola přítomnosti znaků na sériové lince
  if (Serial.available() > 0) {
    // načtení znaku do proměnné
    char znak = Serial.read();
    // tisk přijatého znaku na sériovou linku
    Serial.print("Prijaty znak: ");
    Serial.println(znak);
    // emulace stisku tlačítka s hodnotou o jedna vyšší
    Keyboard.write(znak + 1);
  }
  // pokud je tlačítko stisknuto, provedeme příkazy uvnitř if podmínky
  if (digitalRead(tlacitko) == 1) {
    // emulace pohybu kurzoru myši o 10 pixelů v ose X
    // a 5 pixelů v ose Y (tedy směr vpravo dolů)
    Mouse.move(10, 5);
  }
  // krátká pauza před novým během smyčky
  delay(100);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným tlačítkem získáme například tento výsledek. Pokud si tedy otevřete Sériový monitor, tak si můžete vyzkoušet, že když pošlete například znak „a“, tak se Vám do řádku doplní znak „b“, tedy o jedna vyšší. A když budete držet připojené tlačítko, tak Vám začne ujíždět kurzor myši směrem vpravo dolů.

USB HID funkce je zajímavou funkcí, kterou ale podporují pouze ty Arduina, která mají integrovaný USB převodník uvnitř pouzdra. Jsou to tedy Arduina založená například na čipech Atmega32u4, AT91SAM či SAMD21. S těmito podporovanými deskami pak můžeme pomocí HID funkcionality vytvářet například vlastní Arduino klávesnici, myš, herní ovladač či ovladač na prezentace. U klávesnice pak také můžeme používat nejen písmena a číslice, ale můžeme emulovat i funkční klávesy a jejich kombinace.

Seznam použitých komponent:
https://dratek.cz/arduino/1475-original-arduino-leonardo-vyvojovy-kit-1480154803.html
https://dratek.cz/arduino/822-arduino-leonardo-r3-pro-micro-atmega32u4zakladni-deska-kompatibilni-1500635972.html
https://dratek.cz/arduino/960-arduino-leonardo-pro-mikro-1424029761.html
https://dratek.cz/arduino/1582-arduino-micro-atmega32u4-5v-16mhz-klon-1493032731.html

Další podobné články