arduino의 usb 호스트
개요
arduino uno에 usb host 연결하고, bluetooth 톤글 연결하고, bluetooth keyboard 연결하고, L 치카 해 보았다.
사진
로그
회로도
샘플 코드
#include <BTHID.h>
#include <usbhub.h>
#include "MouseParser.h"
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
class KbdRptParser : public KeyboardReportParser
{
protected:
virtual uint8_t HandleLockingKeys(USBHID * hid, uint8_t key);
virtual void OnControlKeysChanged(uint8_t before, uint8_t after);
virtual void OnKeyDown(uint8_t mod, uint8_t key);
virtual void OnKeyUp(uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
private:
void PrintKey(uint8_t mod, uint8_t key);
};
uint8_t KbdRptParser::HandleLockingKeys(USBHID * hid, uint8_t key)
{
uint8_t old_keys = kbdLockingKeys.bLeds;
switch (key)
{
case UHS_HID_BOOT_KEY_NUM_LOCK:
Serial.println(F("Num lock"));
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
break;
case UHS_HID_BOOT_KEY_CAPS_LOCK:
Serial.println(F("Caps lock"));
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
break;
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
Serial.println(F("Scroll lock"));
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
break;
}
if (old_keys != kbdLockingKeys.bLeds && hid)
{
BTHID * pBTHID = reinterpret_cast<BTHID *> (hid);
pBTHID->setLeds(kbdLockingKeys.bLeds);
}
return 0;
};
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
MODIFIERKEYS mod;
* ((uint8_t *) &mod) = m;
Serial.print((mod.bmLeftCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmLeftShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmLeftAlt == 1) ? F("A") : F(" "));
Serial.print((mod.bmLeftGUI == 1) ? F("G") : F(" "));
Serial.print(F(" >"));
PrintHex<uint8_t>(key, 0x80);
Serial.print(F("< "));
Serial.print((mod.bmRightCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmRightShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmRightAlt == 1) ? F("A") : F(" "));
Serial.println((mod.bmRightGUI == 1) ? F("G") : F(" "));
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
Serial.print(F("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(F("LeftCtrl changed"));
if (beforeMod.bmLeftShift != afterMod.bmLeftShift) Serial.println(F("LeftShift changed"));
if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) Serial.println(F("LeftAlt changed"));
if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) Serial.println(F("LeftGUI changed"));
if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) Serial.println(F("RightCtrl changed"));
if (beforeMod.bmRightShift != afterMod.bmRightShift) Serial.println(F("RightShift changed"));
if (beforeMod.bmRightAlt != afterMod.bmRightAlt) Serial.println(F("RightAlt changed"));
if (beforeMod.bmRightGUI != afterMod.bmRightGUI) Serial.println(F("RightGUI changed"));
};
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
Serial.print(F("UP "));
PrintKey(mod, key);
};
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print(F("ASCII: "));
Serial.println((char) key);
if (key == 49) digitalWrite(2, HIGH);
if (key == 48) digitalWrite(2, LOW);
};
USB Usb;
BTD Btd(&Usb);
BTHID bthid(&Btd, PAIR, "0000");
KbdRptParser keyboardPrs;
MouseRptParser mousePrs;
void setup()
{
pinMode(2, OUTPUT);
Serial.begin(115200);
if (Usb.Init() == -1)
{
Serial.print(F("\r\nOSC did not start"));
while(1);
}
bthid.SetReportParser(KEYBOARD_PARSER_ID, &keyboardPrs);
bthid.SetReportParser(MOUSE_PARSER_ID, &mousePrs);
bthid.setProtocolMode(USB_HID_BOOT_PROTOCOL);
Serial.print(F("\r\nHID Bluetooth Library Started"));
}
void loop()
{
Usb.Task();
}
Reference
이 문제에 관하여(arduino의 usb 호스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ohisama@github/items/ecbda1b232b2426c6e65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
로그
회로도
샘플 코드
#include <BTHID.h>
#include <usbhub.h>
#include "MouseParser.h"
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
class KbdRptParser : public KeyboardReportParser
{
protected:
virtual uint8_t HandleLockingKeys(USBHID * hid, uint8_t key);
virtual void OnControlKeysChanged(uint8_t before, uint8_t after);
virtual void OnKeyDown(uint8_t mod, uint8_t key);
virtual void OnKeyUp(uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
private:
void PrintKey(uint8_t mod, uint8_t key);
};
uint8_t KbdRptParser::HandleLockingKeys(USBHID * hid, uint8_t key)
{
uint8_t old_keys = kbdLockingKeys.bLeds;
switch (key)
{
case UHS_HID_BOOT_KEY_NUM_LOCK:
Serial.println(F("Num lock"));
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
break;
case UHS_HID_BOOT_KEY_CAPS_LOCK:
Serial.println(F("Caps lock"));
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
break;
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
Serial.println(F("Scroll lock"));
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
break;
}
if (old_keys != kbdLockingKeys.bLeds && hid)
{
BTHID * pBTHID = reinterpret_cast<BTHID *> (hid);
pBTHID->setLeds(kbdLockingKeys.bLeds);
}
return 0;
};
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
MODIFIERKEYS mod;
* ((uint8_t *) &mod) = m;
Serial.print((mod.bmLeftCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmLeftShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmLeftAlt == 1) ? F("A") : F(" "));
Serial.print((mod.bmLeftGUI == 1) ? F("G") : F(" "));
Serial.print(F(" >"));
PrintHex<uint8_t>(key, 0x80);
Serial.print(F("< "));
Serial.print((mod.bmRightCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmRightShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmRightAlt == 1) ? F("A") : F(" "));
Serial.println((mod.bmRightGUI == 1) ? F("G") : F(" "));
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
Serial.print(F("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(F("LeftCtrl changed"));
if (beforeMod.bmLeftShift != afterMod.bmLeftShift) Serial.println(F("LeftShift changed"));
if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) Serial.println(F("LeftAlt changed"));
if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) Serial.println(F("LeftGUI changed"));
if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) Serial.println(F("RightCtrl changed"));
if (beforeMod.bmRightShift != afterMod.bmRightShift) Serial.println(F("RightShift changed"));
if (beforeMod.bmRightAlt != afterMod.bmRightAlt) Serial.println(F("RightAlt changed"));
if (beforeMod.bmRightGUI != afterMod.bmRightGUI) Serial.println(F("RightGUI changed"));
};
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
Serial.print(F("UP "));
PrintKey(mod, key);
};
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print(F("ASCII: "));
Serial.println((char) key);
if (key == 49) digitalWrite(2, HIGH);
if (key == 48) digitalWrite(2, LOW);
};
USB Usb;
BTD Btd(&Usb);
BTHID bthid(&Btd, PAIR, "0000");
KbdRptParser keyboardPrs;
MouseRptParser mousePrs;
void setup()
{
pinMode(2, OUTPUT);
Serial.begin(115200);
if (Usb.Init() == -1)
{
Serial.print(F("\r\nOSC did not start"));
while(1);
}
bthid.SetReportParser(KEYBOARD_PARSER_ID, &keyboardPrs);
bthid.SetReportParser(MOUSE_PARSER_ID, &mousePrs);
bthid.setProtocolMode(USB_HID_BOOT_PROTOCOL);
Serial.print(F("\r\nHID Bluetooth Library Started"));
}
void loop()
{
Usb.Task();
}
Reference
이 문제에 관하여(arduino의 usb 호스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ohisama@github/items/ecbda1b232b2426c6e65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
샘플 코드
#include <BTHID.h>
#include <usbhub.h>
#include "MouseParser.h"
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
class KbdRptParser : public KeyboardReportParser
{
protected:
virtual uint8_t HandleLockingKeys(USBHID * hid, uint8_t key);
virtual void OnControlKeysChanged(uint8_t before, uint8_t after);
virtual void OnKeyDown(uint8_t mod, uint8_t key);
virtual void OnKeyUp(uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
private:
void PrintKey(uint8_t mod, uint8_t key);
};
uint8_t KbdRptParser::HandleLockingKeys(USBHID * hid, uint8_t key)
{
uint8_t old_keys = kbdLockingKeys.bLeds;
switch (key)
{
case UHS_HID_BOOT_KEY_NUM_LOCK:
Serial.println(F("Num lock"));
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
break;
case UHS_HID_BOOT_KEY_CAPS_LOCK:
Serial.println(F("Caps lock"));
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
break;
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
Serial.println(F("Scroll lock"));
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
break;
}
if (old_keys != kbdLockingKeys.bLeds && hid)
{
BTHID * pBTHID = reinterpret_cast<BTHID *> (hid);
pBTHID->setLeds(kbdLockingKeys.bLeds);
}
return 0;
};
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
MODIFIERKEYS mod;
* ((uint8_t *) &mod) = m;
Serial.print((mod.bmLeftCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmLeftShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmLeftAlt == 1) ? F("A") : F(" "));
Serial.print((mod.bmLeftGUI == 1) ? F("G") : F(" "));
Serial.print(F(" >"));
PrintHex<uint8_t>(key, 0x80);
Serial.print(F("< "));
Serial.print((mod.bmRightCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmRightShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmRightAlt == 1) ? F("A") : F(" "));
Serial.println((mod.bmRightGUI == 1) ? F("G") : F(" "));
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
Serial.print(F("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(F("LeftCtrl changed"));
if (beforeMod.bmLeftShift != afterMod.bmLeftShift) Serial.println(F("LeftShift changed"));
if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) Serial.println(F("LeftAlt changed"));
if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) Serial.println(F("LeftGUI changed"));
if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) Serial.println(F("RightCtrl changed"));
if (beforeMod.bmRightShift != afterMod.bmRightShift) Serial.println(F("RightShift changed"));
if (beforeMod.bmRightAlt != afterMod.bmRightAlt) Serial.println(F("RightAlt changed"));
if (beforeMod.bmRightGUI != afterMod.bmRightGUI) Serial.println(F("RightGUI changed"));
};
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
Serial.print(F("UP "));
PrintKey(mod, key);
};
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print(F("ASCII: "));
Serial.println((char) key);
if (key == 49) digitalWrite(2, HIGH);
if (key == 48) digitalWrite(2, LOW);
};
USB Usb;
BTD Btd(&Usb);
BTHID bthid(&Btd, PAIR, "0000");
KbdRptParser keyboardPrs;
MouseRptParser mousePrs;
void setup()
{
pinMode(2, OUTPUT);
Serial.begin(115200);
if (Usb.Init() == -1)
{
Serial.print(F("\r\nOSC did not start"));
while(1);
}
bthid.SetReportParser(KEYBOARD_PARSER_ID, &keyboardPrs);
bthid.SetReportParser(MOUSE_PARSER_ID, &mousePrs);
bthid.setProtocolMode(USB_HID_BOOT_PROTOCOL);
Serial.print(F("\r\nHID Bluetooth Library Started"));
}
void loop()
{
Usb.Task();
}
Reference
이 문제에 관하여(arduino의 usb 호스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ohisama@github/items/ecbda1b232b2426c6e65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <BTHID.h>
#include <usbhub.h>
#include "MouseParser.h"
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
class KbdRptParser : public KeyboardReportParser
{
protected:
virtual uint8_t HandleLockingKeys(USBHID * hid, uint8_t key);
virtual void OnControlKeysChanged(uint8_t before, uint8_t after);
virtual void OnKeyDown(uint8_t mod, uint8_t key);
virtual void OnKeyUp(uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
private:
void PrintKey(uint8_t mod, uint8_t key);
};
uint8_t KbdRptParser::HandleLockingKeys(USBHID * hid, uint8_t key)
{
uint8_t old_keys = kbdLockingKeys.bLeds;
switch (key)
{
case UHS_HID_BOOT_KEY_NUM_LOCK:
Serial.println(F("Num lock"));
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
break;
case UHS_HID_BOOT_KEY_CAPS_LOCK:
Serial.println(F("Caps lock"));
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
break;
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
Serial.println(F("Scroll lock"));
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
break;
}
if (old_keys != kbdLockingKeys.bLeds && hid)
{
BTHID * pBTHID = reinterpret_cast<BTHID *> (hid);
pBTHID->setLeds(kbdLockingKeys.bLeds);
}
return 0;
};
void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
MODIFIERKEYS mod;
* ((uint8_t *) &mod) = m;
Serial.print((mod.bmLeftCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmLeftShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmLeftAlt == 1) ? F("A") : F(" "));
Serial.print((mod.bmLeftGUI == 1) ? F("G") : F(" "));
Serial.print(F(" >"));
PrintHex<uint8_t>(key, 0x80);
Serial.print(F("< "));
Serial.print((mod.bmRightCtrl == 1) ? F("C") : F(" "));
Serial.print((mod.bmRightShift == 1) ? F("S") : F(" "));
Serial.print((mod.bmRightAlt == 1) ? F("A") : F(" "));
Serial.println((mod.bmRightGUI == 1) ? F("G") : F(" "));
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
Serial.print(F("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(F("LeftCtrl changed"));
if (beforeMod.bmLeftShift != afterMod.bmLeftShift) Serial.println(F("LeftShift changed"));
if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) Serial.println(F("LeftAlt changed"));
if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) Serial.println(F("LeftGUI changed"));
if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) Serial.println(F("RightCtrl changed"));
if (beforeMod.bmRightShift != afterMod.bmRightShift) Serial.println(F("RightShift changed"));
if (beforeMod.bmRightAlt != afterMod.bmRightAlt) Serial.println(F("RightAlt changed"));
if (beforeMod.bmRightGUI != afterMod.bmRightGUI) Serial.println(F("RightGUI changed"));
};
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
Serial.print(F("UP "));
PrintKey(mod, key);
};
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print(F("ASCII: "));
Serial.println((char) key);
if (key == 49) digitalWrite(2, HIGH);
if (key == 48) digitalWrite(2, LOW);
};
USB Usb;
BTD Btd(&Usb);
BTHID bthid(&Btd, PAIR, "0000");
KbdRptParser keyboardPrs;
MouseRptParser mousePrs;
void setup()
{
pinMode(2, OUTPUT);
Serial.begin(115200);
if (Usb.Init() == -1)
{
Serial.print(F("\r\nOSC did not start"));
while(1);
}
bthid.SetReportParser(KEYBOARD_PARSER_ID, &keyboardPrs);
bthid.SetReportParser(MOUSE_PARSER_ID, &mousePrs);
bthid.setProtocolMode(USB_HID_BOOT_PROTOCOL);
Serial.print(F("\r\nHID Bluetooth Library Started"));
}
void loop()
{
Usb.Task();
}
Reference
이 문제에 관하여(arduino의 usb 호스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ohisama@github/items/ecbda1b232b2426c6e65텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)