
Увеличить
Плата расширения Arduino USB 2.0 Host Shield на MAX3421E белая
ОПИСАНИЕ
Плата расширения USB Host Shield 2.0 позволяет Arduino выступать в роли USB-хоста для USB-периферии: флешек, клавиатур, мышей, MIDI-устройств и прочего. С этой платой открывается масса новых возможностей для создания интересных устройств.
Это модифицированная версия с уже распаянным питанием. Чтобы 5В подавалось на USB-разъём шилда — дополнительно ничего делать не нужно.
Данная плата проверена именно этим скетчем.
-
Зайдите в Arduino IDE. Перейдите в менеджер библиотек (Скетч → Подключить библиотеку → Управлять библиотеками) и введите в поиске: USB Host Shield. Установите библиотеку: USB Host Shield Library 2.0.
-
Загрузите код, который указан ниже на этой странице, на Arduino (без вставленного шилда). Это модернизированный код USBHIDBootKbdAndMouse с добавленной проверкой связи с устройством и небольшой задержкой в 5 мс. Без добавленной задержки в коде устройство может работать нестабильно и терять связь.
-
Вставьте шилд сверху на Arduino — он должен держаться плотно.
-
Вставьте USB-устройство, например простую клавиатуру, в USB-разъём шилда. Желательно использовать простую, не мультимедийную клавиатуру.
-
Подключите Arduino к компьютеру с помощью USB-порта. Дополнительное внешнее питание подключать не нужно, если подключаемое USB-устройство нетребовательно к питанию (не слишком мощное).
-
Откройте монитор порта в Arduino IDE (или закройте и откройте его заново, если он уже был открыт).
-
В мониторе порта должна отобразиться информация о том, что USB-устройство работает.
-
Текст "Usb alive" сообщает, что связь с устройством установлена.
-
Можете понажимать клавиши на клавиатуре, подключённой к USB-шилду. Информация о кодах клавиш должна отобразиться в мониторе порта.
-
Поздравляем! Если всё прошло успешно — USB Host шилд рабочий!
P.S. Перед отправкой мы проверяем каждый шилд на работоспособность.
ПАРАМЕТРЫ
- Совместимые платы Arduino: Uno, Leonardo, Mega
ПРИМЕР КОДА
#include <hidboot.h>
#include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
class MouseRptParser : public MouseReportParser
{
protected:
void OnMouseMove(MOUSEINFO *mi);
void OnLeftButtonUp(MOUSEINFO *mi);
void OnLeftButtonDown(MOUSEINFO *mi);
void OnRightButtonUp(MOUSEINFO *mi);
void OnRightButtonDown(MOUSEINFO *mi);
void OnMiddleButtonUp(MOUSEINFO *mi);
void OnMiddleButtonDown(MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{
Serial.print("dx=");
Serial.print(mi->dX, DEC);
Serial.print(" dy=");
Serial.println(mi->dY, DEC);
};
void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
{
Serial.println("L Butt Up");
};
void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
{
Serial.println("L Butt Dn");
};
void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi)
{
Serial.println("R Butt Up");
};
void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi)
{
Serial.println("R Butt Dn");
};
void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
{
Serial.println("M Butt Up");
};
void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
{
Serial.println("M Butt Dn");
};
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key);
protected:
void OnControlKeysChanged(uint8_t before, uint8_t after);
void OnKeyDown (uint8_t mod, uint8_t key);
void OnKeyUp (uint8_t mod, uint8_t key);
void OnKeyPressed(uint8_t key);
};
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
MODIFIERKEYS mod;
*((uint8_t*)&mod) = m;
Serial.print((mod.bmLeftCtrl == 1) ? "C" : " ");
Serial.print((mod.bmLeftShift == 1) ? "S" : " ");
Serial.print((mod.bmLeftAlt == 1) ? "A" : " ");
Serial.print((mod.bmLeftGUI == 1) ? "G" : " ");
Serial.print(" >");
PrintHex(key, 0x80);
Serial.print("< ");
Serial.print((mod.bmRightCtrl == 1) ? "C" : " ");
Serial.print((mod.bmRightShift == 1) ? "S" : " ");
Serial.print((mod.bmRightAlt == 1) ? "A" : " ");
Serial.println((mod.bmRightGUI == 1) ? "G" : " ");
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
Serial.print("DN ");
PrintKey(mod, key);
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {
MODIFIERKEYS beforeMod;
*((uint8_t*)&beforeMod) = before;
MODIFIERKEYS afterMod;
*((uint8_t*)&afterMod) = after;
if (beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl) {
Serial.println("LeftCtrl changed");
}
if (beforeMod.bmLeftShift != afterMod.bmLeftShift) {
Serial.println("LeftShift changed");
}
if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) {
Serial.println("LeftAlt changed");
}
if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) {
Serial.println("LeftGUI changed");
}
if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) {
Serial.println("RightCtrl changed");
}
if (beforeMod.bmRightShift != afterMod.bmRightShift) {
Serial.println("RightShift changed");
}
if (beforeMod.bmRightAlt != afterMod.bmRightAlt) {
Serial.println("RightAlt changed");
}
if (beforeMod.bmRightGUI != afterMod.bmRightGUI) {
Serial.println("RightGUI changed");
}
}
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
Serial.print("UP ");
PrintKey(mod, key);
}
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print("ASCII: ");
Serial.println((char)key);
};
USB Usb;
USBHub Hub(&Usb);
HIDBoot < USB_HID_PROTOCOL_KEYBOARD | USB_HID_PROTOCOL_MOUSE > HidComposite(&Usb);
HIDBoot HidKeyboard(&Usb);
HIDBoot HidMouse(&Usb);
KbdRptParser KbdPrs;
MouseRptParser MousePrs;
void setup()
{
Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSC did not start.");
delay( 200 );
HidComposite.SetReportParser(0, &KbdPrs);
HidComposite.SetReportParser(1, &MousePrs);
HidKeyboard.SetReportParser(0, &KbdPrs);
HidMouse.SetReportParser(0, &MousePrs);
}
void loop()
{
Usb.Task();
delay(5); // маленькая пауза после Usb.Task()
static uint32_t tmr = 0;
if (millis() - tmr > 1000) { // раз в секунду
if (Usb.getUsbTaskState() == USB_STATE_RUNNING) {
Serial.println("USB is alive!");
} else {
Serial.println("USB is NOT ready.");
}
tmr = millis();
}
}
КОМПЛЕКТ
- Arduino USB host шилд х 1
Характеристики
Плата расширения Arduino USB 2.0 Host Shield на MAX3421E белая | |
---|---|
Модель: | usbhost |
Производитель: |