90 lines
2.8 KiB
Arduino
90 lines
2.8 KiB
Arduino
|
// The source for the Android application can be found at the following link: https://github.com/Lauszus/ArduinoBlinkLED
|
||
|
// The code for the Android application is heavily based on this guide: http://allaboutee.com/2011/12/31/arduino-adk-board-blink-an-led-with-your-phone-code-and-explanation/ by Miguel
|
||
|
#include <adk.h>
|
||
|
|
||
|
//
|
||
|
// CAUTION! WARNING! ATTENTION! VORSICHT! ADVARSEL! ¡CUIDADO! ВНИМАНИЕ!
|
||
|
//
|
||
|
// Pin 13 is occupied by the SCK pin on various Arduino boards,
|
||
|
// including Uno, Duemilanove, etc., so use a different pin for those boards.
|
||
|
//
|
||
|
// CAUTION! WARNING! ATTENTION! VORSICHT! ADVARSEL! ¡CUIDADO! ВНИМАНИЕ!
|
||
|
//
|
||
|
#if defined(LED_BUILTIN)
|
||
|
#define LED LED_BUILTIN // Use built in LED
|
||
|
#else
|
||
|
#define LED 9 // Set to something here that makes sense for your board.
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// Satisfy IDE, which only needs to see the include statment in the ino.
|
||
|
#ifdef dobogusinclude
|
||
|
#include <spi4teensy3.h>
|
||
|
#include <SPI.h>
|
||
|
#endif
|
||
|
|
||
|
USB Usb;
|
||
|
ADK adk(&Usb, "TKJElectronics", // Manufacturer Name
|
||
|
"ArduinoBlinkLED", // Model Name
|
||
|
"Example sketch for the USB Host Shield", // Description (user-visible string)
|
||
|
"1.0", // Version
|
||
|
"http://www.tkjelectronics.dk/uploads/ArduinoBlinkLED.apk", // URL (web page to visit if no installed apps support the accessory)
|
||
|
"123456789"); // Serial Number (optional)
|
||
|
|
||
|
uint32_t timer;
|
||
|
bool connected;
|
||
|
|
||
|
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
|
||
|
if (Usb.Init() == -1) {
|
||
|
Serial.print("\r\nOSCOKIRQ failed to assert");
|
||
|
while (1); // halt
|
||
|
}
|
||
|
pinMode(LED, OUTPUT);
|
||
|
Serial.print("\r\nArduino Blink LED Started");
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
Usb.Task();
|
||
|
|
||
|
if (adk.isReady()) {
|
||
|
if (!connected) {
|
||
|
connected = true;
|
||
|
Serial.print(F("\r\nConnected to accessory"));
|
||
|
}
|
||
|
|
||
|
uint8_t msg[1];
|
||
|
uint16_t len = sizeof(msg);
|
||
|
uint8_t rcode = adk.RcvData(&len, msg);
|
||
|
if (rcode && rcode != hrNAK) {
|
||
|
Serial.print(F("\r\nData rcv: "));
|
||
|
Serial.print(rcode, HEX);
|
||
|
} else if (len > 0) {
|
||
|
Serial.print(F("\r\nData Packet: "));
|
||
|
Serial.print(msg[0]);
|
||
|
digitalWrite(LED, msg[0] ? HIGH : LOW);
|
||
|
}
|
||
|
|
||
|
if (millis() - timer >= 1000) { // Send data every 1s
|
||
|
timer = millis();
|
||
|
rcode = adk.SndData(sizeof(timer), (uint8_t*)&timer);
|
||
|
if (rcode && rcode != hrNAK) {
|
||
|
Serial.print(F("\r\nData send: "));
|
||
|
Serial.print(rcode, HEX);
|
||
|
} else if (rcode != hrNAK) {
|
||
|
Serial.print(F("\r\nTimer: "));
|
||
|
Serial.print(timer);
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if (connected) {
|
||
|
connected = false;
|
||
|
Serial.print(F("\r\nDisconnected from accessory"));
|
||
|
digitalWrite(LED, LOW);
|
||
|
}
|
||
|
}
|
||
|
}
|