6

我正在尝试使用 arduino ADK 板http://arduino.cc/en/Main/ArduinoBoardADK和运行 android 2.3.4 的索尼爱立信 Xperia Play 制作一个项目。对于初学者来说,我想做的就是从我的安卓设备上闪烁一个 LED,使用这里找到的很好的教程http://allaboutee.com/2011/12/31/arduino-adk-board-blink-an-led-with- your-phone-code-and-explanation/。我设法编译了 android 应用程序,但我在 arduino 草图上遇到了很大的困难,我无法解决导入问题,它也无法在 Windows7 上编译。我知道有一些 arduino IDE 版本问题。我尝试在 0022、0023 和 1.0 上编译。在编辑以下代码后,我可以尽最大努力得到这些编译错误AndroidAccessory.h

D:\arduino-0023\libraries\AndroidAccessory/AndroidAccessory.h:37: error: 'EP_RECORD' does not name a type

D:\arduino-0023\libraries\AndroidAccessory/AndroidAccessory.h:50: error: 'EP_RECORD' has not been declared

D:\arduino-0023\libraries\AndroidAccessory/AndroidAccessory.h:50: error: 'EP_RECORD' has not been declared

D:\arduino-0023\libraries\AndroidAccessory/AndroidAccessory.h:64: error: 'USB_NAK_LIMIT' was not declared in this scope

我想我阅读了整个文档,但找不到解决问题的方法。设置它是如此痛苦......我真的需要完成这项工作。先感谢您!:)

-------------------------------------------------- -------------------------------------------------- ----------------------

EDIT1:对我有用的解决方案是在 Linux(Ubuntu)上编译草图

-------------------------------------------------- -------------------------------------------------- ----------------------

EDIT2:再次使用来自arduino 网站的最新 USB 库,代码无法编译。我尝试在运行 Windows 8 和 Ubuntu 12.10 的 IDE v22 和 v1.0.2 上进行编译,但出现以下错误:

E:\Development\arduino-1.0.2\libraries\UsbHost/AndroidAccessory.h: In function 'void setup()':

E:\Development\arduino-1.0.2\libraries\UsbHost/AndroidAccessory.h:68: error: 'void AndroidAccessory::powerOn()' is private
sketch_jan10a:16: error: within this context

E:\Development\arduino-1.0.2\libraries\UsbHost/AndroidAccessory.h: In function 'void loop()':

E:\Development\arduino-1.0.2\libraries\UsbHost/AndroidAccessory.h:66: error: 'int AndroidAccessory::read(void*, int, unsigned int)' is private
sketch_jan10a:23: error: within this context
4

7 回答 7

3

该库是在以下环境中编写和测试的:

阿杜诺阿尔法 0022

您是否尝试将其添加到ArduinoAccessory.h?

#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif 

我也建议通读此书:

http://developer.android.com/guide/topics/usb/adk.html#installing

它特别提到您需要 CapSense 库以及 Arduino 上的 Android 盾牌:

http://www.arduino.cc/playground/Main/CapSense

它还提到您还需要安装 avr-libc:

sudo apt-get install avr-libc

MAC OS X:

fink install avr-libc avr-gcc avr-binutils avrdude 
于 2012-01-30T03:29:58.907 回答
2

EP_RECORD 被定义为 USB Host Shield 1.0 的一部分。但是,它正在 USB Host Shield 2.0 库中被删除。

请参阅此处的公告:http ://www.circuitsathome.com/mcu/usb-host-shield-library-version-2-0-released

因此,如果您升级到 2.0,EP_RECORD 的错误消息将再次出现。另请查看 GitHub 上 2.0 版的 adk.h 和 adk.cpp。更新后的 DemoKit 2.0 示例不再使用 AndroidAccessory.h/.cpp。

于 2012-03-26T01:23:05.423 回答
1

在我看来,您只是缺少定义这些常量的 USB_Host_Shield/Usb.h 标头。

于 2012-02-09T12:10:59.830 回答
1

将此代码放在 Usb.h 中其他定义的位置

#define USB_NAK_LIMIT       32000   //NAK limit for a transfer. 0 means NAKs are not counted 

将其放在 Usb.h 中 SETUP_PKT 的 typedef 之后

/* Endpoint information structure               */
/* bToggle of endpoint 0 initialized to 0xff    */
/* during enumeration bToggle is set to 00      */
typedef struct {        
    byte epAddr;        //copy from endpoint descriptor. Bit 7 indicates direction ( ignored for control endpoints )
    byte Attr;          // Endpoint transfer type.
    unsigned int MaxPktSize;    // Maximum packet size.
    byte Interval;      // Polling interval in frames.
    byte sndToggle;     //last toggle value, bitmask for HCTL toggle bits
    byte rcvToggle;     //last toggle value, bitmask for HCTL toggle bits
    /* not sure if both are necessary */
} EP_RECORD;
于 2013-03-07T05:22:02.747 回答
0

这听起来有点像我不久前遇到的问题。(所以我使用 microbridge 而不是带有 USBDroid 的 ADK)我必须进入 3 个库,错误消息将我指向它们

//(注意:哪些被复制到了一般的 arduino 草图文件夹而不是 arduino 普通库位置)这可能是你的问题?)

然后我在每个中用 Arduino.h 替换wiring.h。(注意,如果这不是您的问题,请备份所有内容以保存一些东西)然后复制到一个名称相同但名称前有一个数字的文件夹中你重新启动arduino软件你会得到一个错误忽略这个并编译。

结果是可以在http://www.youtube.com/watch?v=h7aa_6PNdRI上看到的 USBdroid 工作 仍在进行中,但让我很高兴。我还有一些问题要解决。

干杯,艾尔

于 2012-02-06T12:17:21.783 回答
0

我想如果我们真的知道这个 EP_Record epRecord[8]; 这一切可能会有所帮助。EP_Record 尚未在此文件中声明。因此,它没有类型。当我给 USB_NAK_LIMIT 一个 int 类型时,错误就消失了。我不知道给 EP_Record 什么类型?我唯一能想到的是它可能是一个数组 epRecord[8]; 看起来像一个数组。

虽然 Android 开发者的网站很有用,但它确实缺乏很多方面。一种是为开发人员提供一些在线帮助。这似乎是问题答案的唯一来源,其中大多数并没有真正解决问题。

于 2014-01-20T18:49:07.243 回答
0
  1. 安装 ArduinoADK BETA 001,它是迄今为止可用的最新 ADK。

  2. 解压它,在 arduino 文件夹中你会找到库和库-V2。

  3. 如果你在库中复制 USB 主机,你会得到 androidaccessory.h read private 错误

  4. 从库 V 2 中复制 USB 主机,您应该能够成功编译。我曾是。

于 2015-04-28T10:57:46.923 回答