我需要一个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的库,但它们非常复杂.
如果有人有例子,我相信它会帮助我理解.
如果你想要的只是一些函数,你不需要一个类,但是如果你想学习这个方法,我可以指出你正确的方向.
这是一个简单的图书馆.我们称之为LED.
在这个例子中,我们将重新创建闪烁示例使用库(包含在IDE中).这显然比示例使用的工作更多,但是比较两者应该可以让您更容易理解.
#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++头文件中使用?
#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库规范以查看添加要求.