(Подскажите!) Подключение компьютерной клавиатуры через USB Host Shield

Уважаемые коллеги,

Пытаюсь сделать управление танчиком через WASD - как в компьютерной игре. На данном этапе пытаюсь просто надёжно связать компьютерную клавиатуру с ардуиной.
Имею Arduino uno, опознаваемую как CH340. на неё поставлен USB Host Shield, в его USB разъём подключена клавиатура. Всё куплено понятно на Алишке… И всё работает с моими кодами, но почему-то весьма недолго. Где-то через минуту клавиатура моргает и перестаёт работать

Подскажите, пожалуйста, что не так?

Добавлю картинку и код.


#include <hidboot.h>
#include <usbhub.h>

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>

char keyasc;
int keycode;
boolean iskeypressed;

class KeyboardInput : public KeyboardReportParser
{
 protected:
    void OnKeyDown  (uint8_t mod, uint8_t key);
    void OnKeyPressed(uint8_t key);
};

void KeyboardInput::OnKeyDown(uint8_t mod, uint8_t key)
{
  uint8_t c = OemToAscii(mod, key);
  if (c)
    OnKeyPressed(c);
};

void KeyboardInput::OnKeyPressed(uint8_t key)
{
keyasc = (char) key;
keycode = (int)key;
iskeypressed = true; 
};

USB     Usb;
HIDBoot<USB_HID_PROTOCOL_KEYBOARD>    HidKeyboard(&Usb);
KeyboardInput Prs;

void setup()
{
Serial.begin( 115200 );
#if !defined(__MIPSEL__)
  while (!Serial); 
#endif
  Serial.println("Start");

  if (Usb.Init() == -1)
    Serial.println("OSC did not start.");

  delay( 200 );

  HidKeyboard.SetReportParser(0, &Prs);
}

void loop()
{
Usb.Task();
if(iskeypressed){
  Serial.print(keyasc);
iskeypressed = false;  
}
}

Я подключала без Shield-а, одна клавиатура работала нормально, другая “отваливалась”.
Насколько помню, решилось это подтягиванием D+ и D- через резисторы 10к

А не покажите, пожалуйста, как вы подключали без шилда? может остались фотки или схемки?

Некоторые USB клавиатуры могут работать в режиме PS/2
Если у вас есть переходник USB - PS/2, то проверьте свою клавиатуру подключив ее к ПК. Подключать надо к выключенному ПК.
Если такая проверка не доступна, пропускайте шаг проверки, и сразу собирайте макет на Ардуино. Примеров довольно много, так что один из первых попавшихся https://www.instructables.com/Connect-Arduino-UNO-to-USB-Keyboard/
Если не заработает, и есть есть цифровой осциллограф, то на собранном макете, при запущенной программе посмотреть осциллографом на линии D+ или D- . Если там по линии Clock примерно раз в пол секунды проходят короткие пачки импульсов (обычно 11 импульсов), то эта клавиатура может работать в PS/2 режиме, и надо смотреть, почему не прошла инициализация.
Я подключал только одну клавиатуру, и описал ее поведение, но сильно не разбирался, насколько это общий или частный случай.

Дополнение. Про осциллограф я возможно лишнее написал. Я использовал осциллограф, т.к. сначала пробовал скетч с ошибками, ничего не работало и я полез смотреть осциллографом. Потом на нормальном скетче и без осциллографа увидел, то клавиатура не реагирует на нажатия и периодически шлет 0xAA. После инициализации заработала нормально.

Я использовала библиотеку PS2Keyboard
По ссылке и схема есть, только у меня была USB клавиатура.

Которая…

А некоторые PS/2 клавиатуры ещё могут управлять и индикаторами.)

Коллеги, в моём случае оказалось всё достаточно просто - подводило качество USB Host Shield. Купил новый и стало работать стабильно.