반응형
USB Host Shield 라이브러리에서 제공되는 demokit_20.ino 예제는 안드로이드 폰과 USB Host Shield간의 입/출력 테스트를 할 수 있는 좋은 예제라 생각되어 테스트 해 보았습니다.
이전의 예제는 데모용 안드로이드 앱을 같이 제공되고 있는데 이번 예제는 데모용 안드로이드 앱을 제공 해 주고 있지 않습니다.
그래서 제 입맛에 맞게 안드로이드 어플을 만들어 보았습니다.
아래는 제공되는 예제인데 LED와 버튼을 한개씩 사용하여 Host Shield와 안드로이드 폰과 양방향으로 데이터를 전송하여 처리되고 있는것으로 보입니다.
#include <adk.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>
USB Usb;
USBHub hub0(&Usb);
USBHub hub1(&Usb);
ADK adk(&Usb, "Google, Inc.",
"DemoKit",
"DemoKit Arduino Board",
"1.0",
"http://rudalskim.tistory.com",
"0000000012345678");
uint8_t b, b1;
#define LED1_RED 3
#define BUTTON1 2
#ifdef ESP32
#define LED1_RED_CHANNEL 0
#endif
void init_buttons()
{
pinMode(BUTTON1, INPUT);
// enable the internal pullups
digitalWrite(BUTTON1, HIGH);
}
void init_leds()
{
digitalWrite(LED1_RED, 0);
#ifdef ESP32
ledcAttachPin(LED1_RED, LED1_RED_CHANNEL); // Assign LED pin to channel 0
ledcSetup(LED1_RED_CHANNEL, 12000, 8); // 12 kHz PWM, 8-bit resolution
#else
pinMode(LED1_RED, OUTPUT);
#endif
}
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("\r\nADK demo start");
if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert");
while (1); //halt
}//if (Usb.Init() == -1...
init_leds();
init_buttons();
b1 = digitalRead(BUTTON1);
}
void loop()
{
uint8_t rcode;
uint8_t msg[3] = { 0x00 };
Usb.Task();
if ( adk.isReady() == false ) {
#ifdef ESP32
ledcWrite(LED1_RED_CHANNEL, 255);
#else
analogWrite(LED1_RED, 255);
#endif
return;
}
uint16_t len = sizeof(msg);
rcode = adk.RcvData(&len, msg);
if ( rcode ) {
USBTRACE2("Data rcv. :", rcode );
}
if (len > 0) {
USBTRACE("\r\nData Packet.");
// assumes only one command per packet
if (msg[0] == 0x2) {
switch ( msg[1] ) {
case 0:
#ifdef ESP32
ledcWrite(LED1_RED_CHANNEL, 255 - msg[2]);
#else
analogWrite(LED1_RED, 255 - msg[2]);
#endif
break;
}//switch( msg[1]...
}//if (msg[0] == 0x2...
}//if( len > 0...
msg[0] = 0x1;
b = digitalRead(BUTTON1);
if (b != b1) {
USBTRACE("\r\nButton state changed");
msg[1] = 0;
msg[2] = b ? 0 : 1;
rcode = adk.SndData( 3, msg );
if ( rcode ) {
USBTRACE2("Button send: ", rcode );
}
b1 = b;
}//if (b != b1...
delay( 10 );
}
아래와 같이 회로를 구성하였습니다.
안드로이드폰과 USB Host Shield를 USB 케이블로 서로 연결시킵니다.
제대로 연결이 되면 "USB 액세서리에 연결됨"이라고 팝업창이 나타납니다.
ArduinoDemo 앱을 실행 시킵니다.
앱의 가운데 슬라이드바를 조절하면 아두이노의 LED의 밝기가 변하며, 아두이노에 연결된 버튼을 누르면 안드로이드 앱의 LED 이미지가 켜진 이미지로 변경됩니다.
아래는 테스트된 동작 영상입니다.
반응형
'Hardware > Arduino ( AVR )' 카테고리의 다른 글
[아두이노] TM1637 4-Digit 7-Segment 디스플레이 사용하기 (0) | 2021.01.09 |
---|---|
[아두이노] MCP4725(12bit DAC) 사용하기 (0) | 2021.01.09 |
[아두이노] USB HOST SHIELD 구매 (0) | 2021.01.04 |
[아두이노] 74HC595 테스트 (0) | 2021.01.03 |
[아두이노] FND (7 segment) 테스트 (0) | 2021.01.03 |
댓글