arduino ADK + android LED闪烁示例编译错误

时间:2012-01-29 14:12:45

标签: android arduino adk

我正在尝试使用arduino ADK板http://arduino.cc/en/Main/ArduinoBoardADK和运行android 2.3.4的索尼爱立信Xperia Play制作项目。对于初学者来说,我想要做的就是从我的Android设备上闪烁一个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 website中的最新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

7 个答案:

答案 0 :(得分:3)

该库的编写和测试:

Arduino Alpha 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 

答案 1 :(得分: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。

答案 2 :(得分:1)

听起来像你只是缺少the USB_Host_Shield/Usb.h header,它定义了这些常量。

答案 3 :(得分:1)

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

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

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

/* 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;

答案 4 :(得分:0)

这听起来像是我前一段时间的问题。 (所以我使用microbridge而不是带有USBDroid的ADK)我不得不这样做 进入3个库,错误消息指向我们

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

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

结果是工作USBdroid如图所示 http://www.youtube.com/watch?v=h7aa_6PNdRI 仍然是一项正在进行的工作但让我感到高兴。我还有一些问题需要解决。

干杯, 人

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

  1. 安装ArduinoADK BETA 001,这是迄今为止最新的ADK。

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

  3. 如果您在库中复制USB主机,您将获得androidaccessory.h读取私有错误

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