【问题标题】:arduino ADK + android LED blink example compiling errorsarduino ADK + android LED 闪烁示例编译错误
【发布时间】:2012-01-29 14:12:45
【问题描述】:

我正在尝试使用 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/。我设法编译了安卓应用程序,但我在 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

【问题讨论】:

    标签: android arduino adk


    【解决方案1】:

    该库是在以下位置编写和测试的:

    Arduino 阿尔法 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 shield:

    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 
    

    【讨论】:

    • 是的,我做到了:(这个小的标题编辑让我走到了这一步,但仍然给我留下了你在上面看到的错误......
    • 嗯,我也在版本 0022 上尝试过,我得到了同样的错误......我不明白我做错了什么......
    • @MarciCăşvan 请参阅我的更新答案以获取有关安装必要库的文档的链接。
    • @MarciCăşvan 您是否将我上面的代码添加到ArduinoAccessory.h?也可以尝试在你的草图中包含#include <Usb.h>
    • @MarciCăşvan 我知道这可能会很痛苦。但是,我在 Mac OS X Lion 环境和 Ubuntu 11.10 环境中没有任何问题。您可以考虑安装其中一种操作系统吗?
    【解决方案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。

    【讨论】:

    • 我一定会检查这个,如果我成功了,我会标记你的答案:) 谢谢
    【解决方案3】:

    在我看来你只是缺少the USB_Host_Shield/Usb.h header,它定义了这些常量。

    【讨论】:

    • 我确实也导入了 USB_Host_Shield 和 USB 库...一定是某个地方存在库版本冲突...我会仔细检查
    • @MarciCăşvan 我认为这绝对是您的问题所在。有些东西阻止了该标头被正确包含。
    【解决方案4】:

    将此代码放在 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;
    

    【讨论】:

    • 如果它解决了问题,那就是很好的答案,尽管您可能想解释什么是错的以及为什么需要您的解决方案。
    • 标题中缺少定义,我不知道为什么,所以我挖掘了旧代码并找到了它们。现在我建议安装 Macroduino 库,因为它们运行时没有任何问题。 practicalmaker.com/projects/macroduino-project-page
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

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

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

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

      干杯, 铝

      【讨论】:

      • 我将库复制到文档中提到的/libraries 文件夹中
      【解决方案7】:
      1. 安装 ArduinoADK BETA 001,这是迄今为止可用的最新 ADK。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        相关资源
        最近更新 更多