如何创建Arduino库?

Dan*_*aor 3 arduino

我需要一个Arduino库的简单示例.

我读到这个:https://www.arduino.cc/en/Hacking/LibraryTutorial

这对我来说有点复杂 - 我从代码示例中理解得更好.

我需要为Arduino构建一个库.在库内部,我需要有2个函数,每个函数接收3个字符串值.然后该函数需要将值连接到一个大字符串并发送使用的值创建Serial.println(the new value);

我只需要它进行演示.所以,这些价值观对我来说并不重要.这样我才能从中学习.我想用这种方式使用它.

className.Function1("val1", "val2", val3");
className.Function2("val1", "val2", val3");
Run Code Online (Sandbox Code Playgroud)

文件应该有什么扩展名(.h .cpp)?当然我试图使用Arduino的库,但它们非常复杂.

如果有人有例子,我相信它会帮助我理解.

Chr*_*s A 6

如果你想要的只是一些函数,你不需要一个类,但是如果你想学习这个方法,我可以指出你正确的方向.

这是一个简单的图书馆.我们称之为LED.

在这个例子中,我们将重新创建闪烁示例使用库(包含在IDE中).这显然比示例使用的工作更多,但是比较两者应该可以让您更容易理解.

LED.h

#ifndef LED_h  //Prevents header contents from being added twice.
#define LED_h

class LED{
  public:
    void begin( char PinToUse );
    void on();
    void off();
  private:
    char pin;
};

#endif
Run Code Online (Sandbox Code Playgroud)

标题包含所谓的包含保护,这里解释:为什么#ifndef和#define在C++头文件中使用?

LED.cpp

#include "Arduino.h"
#include "LED.h"

void LED::begin( char PinToUse ){  // LED:: indicates the function belongs to the LED class, and isn't a global function.
  pin = PinToUse;
  pinMode( pin, OUTPUT );
}

void LED::on(){
  digitalWrite( pin, HIGH );
}

void LED::off(){
  digitalWrite( pin, LOW );
}
Run Code Online (Sandbox Code Playgroud)

您需要Arduino.h在库中使用任何Arduino API时包含.正如我digitalWrite().cpp文件中使用的那样,我需要在此示例中包含它.如果您在标题中使用API​​,则需要将其包含在那里.

草图

#include <LED.h>

LED led;

void setup() {
  led.begin(13);
}

void loop() {
  led.on();
  delay(500);
  led.off();
  delay(500);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,库被分为声明(.h)和定义(.cpp).sketch和.cpp文件都包含库头(.h).

当他们想要在他们自己的代码中使用像SPI类这样的另一个库时,会遇到很多人遇到的问题.不幸的是,IDE的设计方式要求草图也包括内部使用的库,无论草图是否直接使用它.还有一个更深入的解释这里.

分享你的创作

图书馆完成后,您可以在Arduino论坛中发布您的图书馆.确保您有一些工作示例,以增加人们尝试工作的机会.这里有一个很好的图书馆位置:其他软件开发.

如果您对GitHub(简介)感到满意,您甚至可以将您的库直接添加到IDE库管理器,这样人们只需单击安装即可使用它.访问1.5库规范以查看添加要求.