在使用Arduino mega2560作为控制板时,如果需要控制的模块比较多,那么将代码全部都写在一份文档里会显得十分臃肿,不利于后续的代码维护和进一步开发,所以根据不同的模块编写相对应的类库就很重要了。
在Arduino IDE的工具栏里选择“项目”->“加载库”,可以看到很多第三方库,有需求的话可以点击选择加载,就可以在代码区最前面看到 #include
类库由头文件和.cpp文件组成,可以用C++或者C语言来编写。这里我需要做的是一个控制光开关的相关模块,所以我在Notepad首先建立一个OptcialSwitch.h的头文件,这里面会放一些类库中使用到的变量和函数。例如下面代码所示,首先需要将"Arduino.h"头文件添加进来,接着我自定义了一些Arduino mega2560和光开关模块相连的PIN脚,最后是类库里使用的变量名和函数名。注意:如果类库的变量一般是不能被主程序使用的,如有这个需求则要将变量名用extern来申明为全局变量。
#ifndef
#include "Arduino.h"
#include "../command.h"
/******************** Pin Number *****************/
#define ChannelBit0 23 //34 //2
#define ChannelBit1 22 //36 //3
#define ChannelBit2 25 //38 //4
#define ChannelBit3 24 //40 //5
#define ChannelBit4 27 //42 //6
#define ResetBit 28 //52 //11
#define ReadyBit 26 //48 //7
#define ErrorBit 29 //50 //8
//使用到的变量名
extern int Channel;
//使用到的函数名
bool OpticalSwitch_Setup(void);
void OpticalSwitchChannel(int num);
接下来是建立一个OpticalSwitch.cpp文件,这个文件里就是具体的光开关操作,比较简单,给各个PIN脚依次赋值就行了。首先需要将"Arduino.h"头文件和我们刚才建立的"OpticalSwitch.h"头文件包含进来,接下来就是编写两个需求的函数,一个初始化一个赋值。当然这里不是程序编译运行的地方,所以不需要Arduino IDE里的 void setup()和void loop()
#include "Arduino.h"
#include "OpticalSwitch.h"
int Channel;
bool OpticalSwitch_Setup(void)
{
//给各个PIN脚设为输出输入模式
pinMode(ChannelBit0, OUTPUT);
pinMode(ChannelBit1, OUTPUT);
pinMode(ChannelBit2, OUTPUT);
pinMode(ChannelBit3, OUTPUT);
pinMode(ChannelBit4, OUTPUT);
pinMode(ResetBit, OUTPUT);
pinMode(ReadyBit, INPUT);
pinMode(ErrorBit, INPUT);
delay(50);
}
void OpticalSwitchChannel(int num)
{
//按通道号的二进制数字给各个PIN脚赋值
num -= 1;
digitalWrite(ResetBit, HIGH);
delay(50);
digitalWrite(ChannelBit4, (num&0x1f)>>4);
digitalWrite(ChannelBit3, (num&0xf)>>3);
digitalWrite(ChannelBit2, (num&0x7)>>2);
digitalWrite(ChannelBit1, (num&0x3)>>1);
digitalWrite(ChannelBit0, num&0x1);
delay(300);
if((digitalRead(ReadyBit)==LOW) && (digitalRead(ErrorBit)==LOW))
{
Channel = num+1;
Serial.println(Channel);
}
}
编写好上述两个文件后,我们还可以写一个能让Arduino IDE识别并高亮显示关键字的keywords.txt文件,在这个文档里编写如下代码。Constants下可以放一些需要高亮显示的变量名。注意,OptcialSwitch_Setup和KEYWORD2之间需要用“TAB”键输入,而不是空格键。
###########################
# Methods and Functions KEYWORD2)
###########################
OpticalSwitch_Setup KEYWORD2
OpticalSwitchChannel KEYWORD2
###########################
#Constants (LITERAL1)
###########################
然后就是来使用我们刚刚编写的类库了。首先要把我们刚刚编写好的.h头文件、.cpp文件和keywords.txt文件放进同一个文件夹,文件夹名称就是你要申明的类库名,比如我就给它取名OpticalSwitch。接着就把这个文件夹放进电脑C盘->“文档”->"libraries"里,如下图所示。这样一个完整的类库就建好了。
最后我们在Arduino里建立一个测试程序来使用这个类库。我们首先一个名字为OpticalSwitchTest.ino的文件,然后选择工具栏->“项目”->“加载库”,就可以在最下面的贡献库看到我们制作的类库了,选择加载就可以在代码最上面引用这个类库,当然也可以手动输入引用。
#include
void setup()
{
Serial.begin(9600);
delay(100);
OpticalSwitch_Setup();
delay(500);
OpticalSwitchChannel(3);
}
void loop()
{
}
测试程序里直接调用这两个函数就可以了,如果模块设置成功了,就可以在串口监视器里看到最后打印出写进去的“3”了。