Class 如何在Arduino应用程序中构建我自己的类库?

Class 如何在Arduino应用程序中构建我自己的类库?,class,arduino,path,Class,Arduino,Path,目标: 在不同的文件中编写不同的C++类(.CPP+.h),并确保它们在编译成一个较大的项目之前单独编译。 平台: mac osx catalina上的Arduino应用程序1.8.12 问题 我想不出一个干净简单的方法来做这件事 显而易见的事情是行不通的: arduino应用程序本身只允许我打开.ino文件——因此我不能简单地打开.cpp文件然后告诉它编译 我曾尝试在arduino网站上学习示例教程,但它所指的菜单命令似乎已经过时 我一直在尝试这方面的三种解决方法 我可以将所有的.cpp和.

目标: 在不同的文件中编写不同的C++类(.CPP+.h),并确保它们在编译成一个较大的项目之前单独编译。 平台: mac osx catalina上的Arduino应用程序1.8.12

问题 我想不出一个干净简单的方法来做这件事

显而易见的事情是行不通的: arduino应用程序本身只允许我打开.ino文件——因此我不能简单地打开.cpp文件然后告诉它编译

我曾尝试在arduino网站上学习示例教程,但它所指的菜单命令似乎已经过时

我一直在尝试这方面的三种解决方法

  • 我可以将所有的.cpp和.h文件放在一个目录中,其中包含一个.ino文件。此目录位于“我的草图”文件夹中。当我这样做的时候,整个事情都会被编译。所以我可以试着用这种方法找出错误

  • 我可以将每个类文件(.cpp和.h)放在它自己的目录中,命名相同,然后将该目录放在本地adruino库路径中。然后,我创建一个虚拟草图,其中只包含类的头文件。这似乎开始检查标题上的语法

  • 将所有内容放在一个文件中,并将其命名为.ino。就可管理代码而言,真恶心

  • 除了乱七八糟之外,这些问题的症结在于(1)是一种要么全有要么全无的问题,因为类太多,不需要一次调试。(2)一次上课太少

    当然,有一些简单的方法可以像普通编译器一样使用Arduino应用程序,即使它是命令行命令,也可以编译类并向我提供错误消息


    很抱歉,我还不是使用arduino编译器的专家。我曾经有一次将ATOM设置为我的IDE,但它不再适合我了。我喜欢Arduio应用程序,因为IDE非常简单,但它拥有从库搜索到设备信息和串行监控的所有功能,所以我不愿意切换。但是如果有人给我一个关于如何开始使用更好的IDE的好建议,我会尝试它。

    在Arduino IDE中,主草图文件必须是.ino。可以将cpp和h文件添加到IDE中或IDE外部的草图文件夹中。它们将在Arduino IDE中作为选项卡打开

    如果希望cpp/h文件是独立的(教程没有过时)。要测试库,请创建测试草图。该库将与草图一起编译。要编辑库的源文件,不能使用Arduino IDE


    注意:“草图”是“项目”,不是ino文件sketch'是一个包含主草图文件和附加.ino、.h、.cpp、.c、.S文件的文件夹。

    有两种方法可以让Arduino应用程序自己编译一个.cpp文件。这些操作相当笨拙,因为您必须将.h和.cpp从项目文件夹中移动或复制到神奇的位置。但也不难。在Arduino.cc上,关于制作自己的图书馆的教程清晰地解释了这些关键步骤

    假设要编译的代码是foo.h和foo.cpp

    方法#1

  • 在本地(非系统)库文件夹中创建一个名为“foo”的文件夹。并将foo.h和foo.cpp放在此文件夹中

  • 创建一个虚拟项目dummy.ino,如下所示:

  • #包括“foo.h”//注意引号中没有
    设置(){};
    循环(){};
    
  • 编译虚拟项目
  • 这就是发生的魔力。当Arduino.app包含“foo.h”时,它会发现本地库中的路径也包含foo.cpp,即使不需要编译它(链接器永远不会需要它),构建系统也会看到头的包含并编译它。这是副作用

    好了

    (旁白:这还有一个相反的副作用,即如果您曾经有一个非常有用的头,并且意外地在同一文件路径上有一个名称类似但已损坏的.cpp文件,那么ardunio编译器将在无用且错误地编译一个文件时出错,即使它永远不会链接到该文件。)

    替代方法1:(稍好)

  • 使用Arduino应用程序创建相同的dummy.ino草图。保存它。当您使用ardunio应用程序保存此文件时,它会礼貌地提供一个同名文件夹以将其放入其中。接受这种好意

  • 将foo.h和foo.cpp与dummy.ino放在同一个文件夹中

  • 关闭dummy.ino的arduino应用程序窗口

  • 在新的arduino窗口中重新打开dummy.ino。这不仅会打开dummy.ino,还会打开foo.h和foo.cpp的选项卡

  • 编译它

  • 方法#2:(快速简单,但不是一个好的开发实践)

  • 在ardunio.app中打开新的默认草图

  • 将foo.f的内容粘贴到顶部,保留setup()和loop()声明

  • 将foo.cpp的内容粘贴到下面

  • 编译它


  • 这个乱码用于检查foo.cpp语法,但不检查任何路径解析过程。

    您可以在任何文本编辑器中编辑.cpp和.h文件。记事本++很流行,而且更倾向于编码。但任何文本编辑器都可以。和其他库一样,它不需要在IDE中打开,就可以从草图中包含并编译。对于Arduino的内容,我非常喜欢Eclipse。有几种不同的非常简单的方法可以让它与Arduino一起工作。网上有很多说明,这正是我不再使用ArduinoIDE的原因。我使用它,它提供了良好的项目开发结构、库依赖关系管理、编译器标志设置等等。这是一个可以安装在Atom或VScode编辑器上的插件,请看一下这个YouTube并快速入门
    #include "foo.h"  // note the quotes not <angle brackets>
    setup (){};
    loop (){};