我正在尝试使用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
答案 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)
安装ArduinoADK BETA 001,这是迄今为止最新的ADK。
解压缩它,在arduino文件夹中你会找到库和库。
如果您在库中复制USB主机,您将获得androidaccessory.h读取私有错误
从库V 2复制USB主机,您应该能够成功编译。我是。