目录
一、前言
二、类封装
1、创建头文件
2、创建源文件
3、条件编译说明
(1)头文件重复定义
(2)版本兼容性预处理
4、用户程序中使用封装的类
5、测试
三、将封装的类制作成库文件
1、创建SR04库文件目录
2、库文件中提供样例程序
3、关键字高亮显示设置
一、前言
将程序封装成类增加了程序代码的移植性和代码可复用性,比如一个系统中使用多个同一类型传感器,使用类的方式只需要将功能写一次即可多次使用。本文以超声波测距举例说明在Arduino中怎么封装类,超声波测距(没有使用封装)可以参见博客:
Arduino超声波测距-CSDN博客
二、类封装
1、创建头文件
创建头文件,命名SR04.h
添加代码
#ifndef SR04_H
#define SR04_H
#if defined(ARDUINO) && ARDUINO >=100
#include "Arduino.h"
#else
#include "WProgram.h"
#endifclass SR04
{public:SR04(int TrigPin, int EchoPin);float Get();private:int Trig_Pin;int Echo_Pin;//float distance;
};#endif
2、创建源文件
创建源文件,命名SR04.cpp
添加代码
#if defined(ARDUINO) && ARDUINO >=100#include "Arduino.h"#else#include "WProgram.h"
#endif
#include "SR04.h"SR04::SR04(int trig,int echo)
{pinMode(echo, INPUT); pinMode(trig, OUTPUT);Trig_Pin=trig;Echo_Pin=echo;}float SR04::Get()
{digitalWrite(Trig_Pin, LOW); delayMicroseconds(2); digitalWrite(Trig_Pin, HIGH); //输出高电平,延时10msdelayMicroseconds(10);digitalWrite(Trig_Pin, LOW);float distance = pulseIn(Echo_Pin, HIGH); //接受返回信号return distance /58.00; //计算距离
}
3、条件编译说明
(1)头文件重复定义
代码
#ifndef SR04_H
#define SR04_H……#endif
条件编译命令,#ifndef SR04_H语句会查找标识符SR04_H是否在程序的其它位置被#define定义过。若没有定义过,则定义该标识符。这种写法主要是放置重复定义,编译报错。
(2)版本兼容性预处理
代码
#if defined(ARDUINO) && ARDUINO >=100#include "Arduino.h"#else#include "WProgram.h"
#endif
此编译命令的作用是增加Arduino IDE版本的兼容性。
Arduino IDE编译器1.0之前的版本核心库文件使用的主要函数声明头文件为WProgram.h,1.0以后的版本中核心库文件使用的主要函数声明头文件为Arduino.h。添加这段预编译语句,可以使编译器自动判断正在使用的IDE版本,从而正确使用头文件。
4、用户程序中使用封装的类
在用户程序中需要添加引用头文件SR04.h,然后实例化SR04类、选择对应的传感器引脚。具体实现方式见下面代码。
代码:
#include "SR04.h"
const long _1000msTime = 1000; // 1000 milli seconds
unsigned long _1000msLastTime;
const long _100msTime = 100; // 100 milli seconds
unsigned long _100msLastTime;
const long _10msTime = 10; // 10 milli seconds
unsigned long _10msLastTime;SR04 sr04=SR04(9,8);
int currDistance = 0; // 距离void setup()
{Serial.begin(9600);
}void loop()
{currDistance=sr04.Get();TimeProc();}void TimeProc()
{//1000ms执行一次if ((millis() - _1000msLastTime) >= _1000msTime){_1000msLastTime = millis( ); //Serial.print("Distance is: "); Serial.print(currDistance);Serial.println(" cm;");}//100ms执行一次if ((millis() - _100msLastTime) >= _100msTime){_100msLastTime = millis( ); //}//10ms执行一次if ((millis() - _10msLastTime) >= _10msTime){_10msLastTime = millis( ); //}}
5、测试
测试的硬件
串口获取数据
三、将封装的类制作成库文件
1、创建SR04库文件目录
在编译器libraries文件夹中创建SR04文件夹,在SR04文件夹文件夹中存储下面三个文件:头文件、源文件、关键字文件。(keywords.txt文件说明如下所示)
至此,一个超声波测距的库文件就制作成功了。重启一下Arduino IDE编译器即可生效。此时关键字高亮显示、库文件中多出了SR04库
2、库文件中提供样例程序
作为封装好了的库文件,还需要在库文件中提供样例程序,以方便其它用知道该库文件是如何被使用的。
在SR04文件夹中创建examples文件夹,在examples文件夹中添加样例程序。
在examples中,文件夹名和程序名必须相同。
设置完成以后重新启动Arduino IDE编译器,在示例中即可看到添加的样例程序。打开示例程序,下载、运行,正常。
3、关键字高亮显示设置
类封装完了以后,Arduino IDE还无法识别并高亮显示关键字,如类名SR04、Get函数名并没有高亮显示。需要新建一个keywords.txt文本文件,标出需要高亮显示的关键字。
(如果封装的类不制作成库文件,保存在程序文件夹中。则不用设置关键字高亮)