给Arduino编写库文件
Loki于2014-8-29整理
本文档解释了如果给Arduino创建库文件。先从描述一个会闪烁的摩斯码代码开始,再解释怎么样把它转换成库文件。这样你写的代码就能很容易地让别人使用,同时也方便你进行修改并更新它。
如果想了解更多,请查看API Style Guide,一个让你的库制作一个良好的Arduino API风格的指导。
我们以一个简单的摩斯码工程代码开始:
int pin = 13;
void setup()
{
  pinMode(pin, OUTPUT);
}
void loop()
{
  dot(); dot(); dot();
  dash(); dash(); dash();
  dot(); dot(); dot();
  delay(3000);
}
void dot()
{
  digitalWrite(pin, HIGH);
  delay(250);
  digitalWrite(pin, LOW);
  delay(250);
}
void dash()
{
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(250);
}
    如果你运行这个工程,它会在13引脚上闪烁来发送一个SOS信号(一个求救信号)。
    我们需要把该工程一些不一样的地方放到我们的库里面去。第一,当然我们需要真正起作用(制造闪光)的dot()和dash()函数。第二,需要一个给函数用来确定哪个引脚需要使用的ledPin变量。最后,代码中调用了一个把引脚初始化为输出的函数pinMode()。
    让我们开始把这个工程转换成一个库!
    你最少需要两个库文件:一个头文件(扩展文件.h)和一个源文件(扩展 .cpp)。这个头文件为库做了各种定义:把所有基础的东西都罗列在里面了;而源文件则包含着真实的代码。我们会把我们的库叫做“摩斯码”,所以我们的头文件就是Morse.h。让我们来看一看它是什么样的。它刚开始看起来有点奇怪,但是当你看了它的源代码之后,你就会觉得它越来越亲切了。
    头文件的核心包括了:把库的每一个函数列出来;声明了一个有你需要变量的类:
class Morse
{
  public:
    Morse(int pin);
    void dot();
    void dash();
  private:
    int _pin;
};
    一个类是把所有的函数和变量都集中到了一个地方。这些函数和变量可以是公共的(public),意味着能让使用你的库的人来调用这些函数和变量;当是私有的(private)时候,这些函数和变量只能在类里面进行调用。每一个类都有一个特殊的函数被叫做构造器(constructor),一个用来创建类的实例的函数。这个构造器有着和类一样的名字,同时不能有返回类型。
    你还需要对头文件做两件事情。一个是需要使用#include声明你调用了Arduino语言的标准类型和变量(这个会自动在普通的工程中进行声明,但是不会在库中自动声明)。它看起来像这样(大概就像事先给类进行定义):
#include "Arduino.h"ajax实例里面的函数
    最后,都会使用如下奇怪的结构把整个头文件放到里面去:
#ifndef Morse_h
#define Morse_h
// the #include statment and code
#endif
    显而易见,这样的结构是预防某人不小心调用了两次你的库。
    最后,你通常会对库的名字在最开始的部分进行说明,简单的描述它是干嘛用的,谁写的,什么时候写的,还有谁可以使用它。
    让我们看一下完整的头文件:
/*
  Morse.h - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/
#ifndef Morse_h
#define Morse_h
#include "Arduino.h"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。