Arduino学习篇(三)自定义库

前言

在使用Arduino mega2560作为控制板时,如果需要控制的模块比较多,那么将代码全部都写在一份文档里会显得十分臃肿,不利于后续的代码维护和进一步开发,所以根据不同的模块编写相对应的类库就很重要了。

编写头文件
类库由头文件和.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);

.CPP文件
接下来是建立一个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)
###########################

2. 使用类库
然后就是来使用我们刚刚编写的类库了。首先要把我们刚刚编写好的.h头文件、.cpp文件和keywords.txt文件放进同一个文件夹,文件夹名称就是你要申明的类库名,比如我就给它取名OpticalSwitch。接着就把这个文件夹放进电脑C盘->“文档”->"libraries"里,如下图所示。这样一个完整的类库就建好了。
在这里插入图片描述

最后我们在Arduino里建立一个测试程序来使用这个类库。我们首先一个名字为OpticalSwitchTest.ino的文件,然后选择工具栏->“项目”->“加载库”,就可以在最下面的贡献库看到我们制作的类库了,选择加载就可以在代码最上面引用这个类库,当然也可以手动输入引用

在这里插入图片描述

#include <OpticalSwitch.h>

void setup() 
{
    Serial.begin(9600);
    delay(100);
    OpticalSwitch_Setup();
    delay(500);
    OpticalSwitchChannel(3);
}

void loop() 
{
}

测试程序里直接调用这两个函数就可以了,如果模块设置成功了,就可以在串口监视器里看到最后打印出写进去的“3”了。


 

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值