1、Arduino的扩展库都是放在 libraries目录下的。完整路径为:C:\Users\41861\AppData\Local\Arduino15\libraries
所以我们需要在这个目录下创建一个文件夹,比如上面的例子是esp32上led灯控制程序,于是我创建了 m_led文件夹(前面加m是为了和官方库区分开,这只是我自己的习惯而已)。然后把写好的.cpp 和 .h文件拷贝到里面去,这样就OK了。
或者(把led.h和led.cpp复制到C:\Users\41861\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6\cores\esp32路径下。不推荐这种写法,因为这种方法会跟系统库文件混合在一起,不方便管理)
2、编写led.h文件
/*******************
LED.h*******************/#ifndef _LED_H__
#define _LED_H__
//导入Arduino核心头文件
#include"Arduino.h" class LED
{private:byte pin; //控制led使用的引脚public:LED(byte p , bool state=LOW ); //构造函数~LED(); //析构函数byte getPin(); //获取控制的引脚 void on(); //打开LEDvoid off(); //关闭LEDbool getState(); //获取LED状态void disattach(); //释放引脚与LED的绑定,使得引脚可以控制其他的东西};
#endif
3、编写led.cpp文件:
/*****************
LED.cpp******************/#include"LED.h"
#include"Arduino.h"LED::LED(byte p,bool state):pin(p)
{ pinMode(pin,OUTPUT);digitalWrite(pin,state);
}
LED::~LED()
{disattach();
}
void LED::on()
{digitalWrite(pin,HIGH);
}
void LED::off()
{digitalWrite(pin,LOW);
}bool LED::getState()
{return digitalRead(pin);
}
void LED::disattach() //引脚回收,恢复到上电状态
{digitalWrite(pin,LOW);pinMode(pin,INPUT);
}
4、创建一个my_led.ino文件(ardunio主文件名以.ino结尾)。在该文件中可以直接使用自定义的库了,引入自定义的库头文件 #inclue <led.h>
#include<led.h> //注意,由于LED控制模块已经是标准库了,所以使用尖括号<> 包含LED led(7);
byte count =0;void setup() {Serial.begin(9600);
}void loop() {if(count<10){led.on();delay(300);Serial.println(led.getState(),DEC);led.off();delay(300);Serial.println(led.getState(),DEC);++count;if(count==10)led.disattach();}
}
跟led.cpp 、 led.h 一起有个 keywords.txt文件,这个是什么用呢?其实它没有太大的实用性,只是为了配置自定义库的语法高亮。让我们自己的库能在IDE下显示不同的颜色而已。如果不配置,Arduino IDE不能渲染出颜色的。
5、编写keywords.txt,该文件可以不写。
keywords.txt 中#开头的是注释。格式:word【tab】DESCRIPTION
word就是你要高亮的关键字接着1 个 tab 键 ,然后就是DESCRIPTION。
DESCRIPTION可以取的值:KEYWORD1 高亮类名;KEYWORD2 高亮方法名;LITERAL1 高亮常量。注意中间使用的是 1 个 tab 键 隔开的
下面是keywords.txt的内容
#class (KEYWORD1)
LED KEYWORD1
#function and method (KEYWORD2)
on KEYWORD2
off KEYWORD2
getState KEYWORD2
disattach KEYWORD2
#constant (LITERAL1)
#none
6、选择sp32的开发版和对应的串口
7、点击ardunio的IDE右上角箭头,编译my_led.ino文件,编译好后会自动上传到esp32中。
参考:如何编写自己的Arduino库?-腾讯云开发者社区-腾讯云