Arduino类库封装编写-以超声波测距举例

📅 2026/6/24 6:43:35
Arduino类库封装编写-以超声波测距举例
目录一、前言二、类封装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 #endif class SR04 { public: SR04(int TrigPin, int EchoPin); float Get(); private: int Trig_Pin; int Echo_Pin; //float distance; }; #endif2、创建源文件创建源文件命名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_Pintrig; Echo_Pinecho; } float SR04::Get() { digitalWrite(Trig_Pin, LOW); delayMicroseconds(2); digitalWrite(Trig_Pin, HIGH); //输出高电平延时10ms delayMicroseconds(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.h1.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 sr04SR04(9,8); int currDistance 0; // 距离 void setup() { Serial.begin(9600); } void loop() { currDistancesr04.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文本文件标出需要高亮显示的关键字。如果封装的类不制作成库文件保存在程序文件夹中。则不用设置关键字高亮