ardunio中自定义的库文件

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();      //打开LED
          void off();     //关闭LED
          bool 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库?-腾讯云开发者社区-腾讯云

相关推荐
山木嵌入式16 小时前
【STM32实战】轻量级任务调度器实现
stm32·单片机·rtos·任务调度器·裸机开发
guygg8817 小时前
基于霍尔传感器的BLDC控制源码
单片机·嵌入式硬件
ytttr87317 小时前
DSP 28335 CAN总线通信程序
开发语言·stm32·单片机
一枝小雨19 小时前
RISC-V架构sp寄存器 & RISC-V架构下FreeRTOS任务上下文保存与恢复
单片机·架构·嵌入式·risc-v·rtos·内核原理
BW.SU20 小时前
PackagingTool 嵌入式资源打包合并工具
单片机·二进制·嵌入式开发·资源合并软件·图片打包
长安第一美人21 小时前
工业级实时监控系统开发:PHP+ZMQ+JS 前后端分离架构全解析
前端·嵌入式硬件·架构·交互·rk3588·zmq后端
田甲21 小时前
STM32开发环境迁移实践:从 CubeMX 生成 CMake 工程到 VS Code 编译与调试
stm32·单片机·嵌入式硬件
hoiii18721 小时前
在 STM32F1上读取 BMX055 三轴加速度
stm32·单片机·嵌入式硬件
嵌入式小站21 小时前
STM32 零基础可移植教程 04:按键输入,为什么按下去读到的是 0 或 1
chrome·stm32·嵌入式硬件
三佛科技-187366133971 天前
BP8522D贴片SOP7,5V150mA高集成度无VCC电容降压型恒压芯片解析
单片机·嵌入式硬件