GyverLibs / EasyHID

Библиотека программного USB клавиатуры и мыши для Arduino Nano/UNO/Mega и прочих
MIT License
113 stars 23 forks source link

Foo Foo Foo Foo

Foo

EasyHID

Библиотека для программной реализации USB клавиатуры и мышки на некоторых МК AVR и платах на их основе

Видео по библиотеке

Смотреть на YouTube

Совместимость

МК AVR с тактированием 16 МГц !!!

Важные моменты

У МЕНЯ НЕ РАБОТАЕТ!

Библиотека работает очень стабильно на перечисленных выше платах, поэтому:

Содержание

Установка

Подключение

Arduino UNO/NANO/PRO MINI (ATmega328p/168p) 16 MHz

scheme

Компоненты

Пины

Порт и пин можно задать в файле usbconfig.h. Стандартные:

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

HID

HID.begin();            // Инициализация шины USB
HID.end();              // Отключение шины USB
HID.tick();             // Поллинг шины (вызывать не реже, чем раз в 10мс)
HID.isConnected();      // (bool) Статус шины
HID.isNumLock();        // (bool) Проверка numLock
HID.isCapsLock();       // (bool) Проверка capsLock
HID.isScrollLock();     // (bool) Проверка scrollLock

Mouse

Mouse.move(int16_t x, int16_t y);   // Двигаем курсор
Mouse.click(uint8_t btn);           // Кликаем на клавишу
Mouse.press(uint8_t btn);           // Зажимаем клавишу
Mouse.releaseAll();                 // Отпускаем все

// КОНСТАНТЫ КНОПОК
MOUSE_LEFT
MOUSE_RIGHT
MOUSE_MIDDLE

Keyboard

Keyboard.press(uint8_t key1, ... key5);     // Нажатие до пяти кнопок
Keyboard.click(uint8_t key1, ... key5);     // Клик до пяти кнопок
Keyboard.release(uint8_t key1, ... key5);   // Отпускание до пяти кнопок
Keyboard.releaseAll();                      // Отпустить все ранее нажатые
Keyboard.clickMultimediaKey(uint8_t key);   // Кликнуть мультимедиа клавишу
Keyboard.clickSystemKey(uint8_t key);       // Кликнуть системную клавишу

Keyboard.write(uint8_t data);               // Напечатать символ
Keyboard.print();                           // Напечатать любой тип данных (из Print.h)
Keyboard.println();                         // Напечатать любой тип данных (из Print.h)

Константы клавиш

Обычные (press/click/release) ```cpp KEY_1 KEY_2 KEY_3 KEY_4 KEY_5 KEY_6 KEY_7 KEY_8 KEY_9 KEY_0 KEY_A KEY_B KEY_C KEY_D KEY_E KEY_F KEY_G KEY_H KEY_I KEY_J KEY_K KEY_L KEY_M KEY_N KEY_O KEY_P KEY_Q KEY_R KEY_S KEY_T KEY_U KEY_V KEY_W KEY_X KEY_Y KEY_Z KEY_COMMA KEY_PERIOD KEY_MINUS KEY_EQUAL KEY_BACKSLASH KEY_SQBRAK_LEFT KEY_SQBRAK_RIGHT KEY_SLASH KEY_F1 KEY_F2 KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F8 KEY_F9 KEY_F10 KEY_F11 KEY_F12 KEY_APP KEY_ENTER KEY_BACKSPACE KEY_ESC KEY_TAB KEY_SPACE KEY_INSERT KEY_HOME KEY_PAGE_UP KEY_DELETE KEY_END KEY_PAGE_DOWN KEY_PRINTSCREEN KEY_ARROW_RIGHT KEY_ARROW_LEFT KEY_ARROW_DOWN KEY_ARROW_UP KEY_LEFT_CONTROL KEY_LEFT_SHIFT KEY_LEFT_ALT KEY_LEFT_WIN KEY_RIGHT_CONTROL KEY_RIGHT_SHIFT KEY_RIGHT_ALT KEY_RIGHT_WIN ```
Мультимедийные (clickMultimediaKey) ```cpp KEY_VOL_UP KEY_VOL_DOWN KEY_NEXT_TRACK KEY_PREV_TRACK KEY_STOP KEY_PLAYPAUSE KEY_MUTE KEY_BASSBOOST KEY_LOUDNESS KEY_KB_EXECUTE KEY_KB_HELP KEY_KB_MENU KEY_KB_SELECT KEY_KB_STOP KEY_KB_AGAIN KEY_KB_UNDO KEY_KB_CUT KEY_KB_COPY KEY_KB_PASTE KEY_KB_FIND ```
Системные (clickSystemKey) ```cpp KEY_POWER KEY_SLEEP KEY_WAKE ```

Примеры

Смотри более расширенные примеры в папке examples!

Клавиатура

#include <EasyHID.h>

void setup() {
  HID.begin();                          // Инициализация USB
}

void loop() {
  static uint32_t timer = millis();     // Миллис - таймер (НЕ DELAY!!!)
  if (millis() - timer >= 1000) {       // Каждые 1000 мс
    timer = millis();

    Keyboard.press(KEY_1);              // Зажимаем клавишу '1'
    Keyboard.releaseAll();              // Отпускаем все клавиши
    Keyboard.click(KEY_SPACE);          // Кликаем пробел (press + releaseAll)
    Keyboard.write('-');                // Выводим тире
    Keyboard.println(" Hello world!");  // Печать в println
  }

  HID.tick();   // Вызываем тикер не реже чем каждые 10 мс!
}

Мышь

#include <EasyHID.h>

void setup() {
  HID.begin();                          // Инициализация USB
}

void loop() {
  static uint8_t count = 0;             // Направление
  static uint32_t timer = millis();     // Миллис - таймер (НЕ DELAY!!!)
  if (millis() - timer >= 1000) {       // Каждые 1000 мс
    timer = millis();
    switch (count) {
      case 0: Mouse.move(100, 0);  break; // Двигаем мышкой на X-Y пикс.
      case 1: Mouse.move(0, 100);  break;
      case 2: Mouse.move(-100, 0); break;
      case 3: Mouse.move(0, -100); break;
    }
    // Mouse.click();                   // Можно кликнуть ЛКМ
    // Mouse.click(MOUSE_MIDDLE);       // Или RIGHT, LEFT, MIDDLE
    if (++count > 3) count = 0;         // Циклический сдвиг от 0 до 3
  }

  HID.tick();   // Вызываем тикер не реже чем каждые 10 мс!
}

Версии

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать: