制作Arduino库——摩斯码

前沿

Arduino的库文件由.h和.cpp组成。.h头文件用来声明变量、函数、类等;.cpp源文件用来写具体实现。即库文件里就完成了变量的定义、函数的定义。这样的话当引用库以后,就可以直接使用库里面的函数,而不用了解其中复杂的过程。这大大简化的编程过程。

本博客以摩斯码(morse)代码为例子进行制作Arduino库及讲解。

1、文件结构

Arduino库文件的基本结构:

|--My_morse
   |--morse.h
   |--morse.cpp
   |--keywords.txt

文件作用说明:
morse.h文件: 声明变量、函数、类等。
morse.cpp文件: 定义函数,即写具体实现。
keywords.txt文件:配置自定义库的语法高亮。

我创建的文件结构如下所示:
在这里插入图片描述

2、主文件代码

主文件代码即.ino文件中的代码。摩斯码的实现实际就是使用LED亮灭的长短的组合来表示不同的意思。代码如下:

int pin = 13;  //使用13引脚

void setup()
{
  pinMode(pin,OUTPUT);//引脚初始化为输出的pinMode()函数。
}

void loop()
{
  dot();dot();dot();
  dash();dash();dash();
  dot();dot();dot();
  delay(3000);
}

void dot()  //表示短促的点信号“・”的函数
{
  digitalWrite(pin,HIGH);
  delay(250);
  digitalWrite(pin,LOW);
  delay(250);
}

void dash()  //表示保持一定时间的长信号“—”的函数
{
  digitalWrite(pin,HIGH);
  delay(1000);
  digitalWrite(pin,LOW);
  delay(250);
}

3、自定义Arduino库

3.1、编写.h头文件

头文件的核心包括:把库的每一个函数列出来;声明需要变量的类。

morse.h文件内容如下:

#ifndef _morse_h__
#define _morse_h__

//导入Arduino核心头文件,声明调用了Arduino语言的标准类型和变量(这个会自动在普通的工程中进行声明,但是不会在库中自动声明)
#include"Arduino.h"  

class morse   //标签名即类名,类名和文件名必须统一。
{
public:  //函数外部用
  morse(int pin);  //构造函数
  void dot();  //.ino主文件中的函数
  void dash();
private:  //函数内部用
  int _pin;  //控制led使用的引脚
};

#endif
  • 一个类是把所有的函数和变量都集中到了一个地方。这些函数和变量可以是公共的(public),意味着能让使用你的库的人来调用这些函数和变量;也可以是私有的(private),意味着这些函数和变量只能在类里面进行调用。
  • 每个类都有一个特殊的函数被叫做构造器(constructor),一个用来创建类的实例的函数。这个构造器有着和类一样的名字,同时不能有返回类型。

3.2、编写.cpp源文件

.cpp源文件则包含着真实的代码。把原工程的代码转换成库的代码,即在原工程的函数前加类名::,这里为morse::。

morse.cpp文件内容如下:

#include "Arduino.h"
#include "morse.h"

//格式为【标签名(.h文件中定义的标签)::函数名】
morse::morse(int pin)  //
{
pinMode(pin,OUTPUT);
_pin=pin;
}

void morse::dot()
{
  digitalWrite(_pin,HIGH);
  delay(250);
  digitalWrite(_pin,LOW);
  delay(250);
}

void morse::dash()
{
  digitalWrite(_pin,HIGH);
  delay(1000);
  digitalWrite(_pin,LOW);
  delay(250);
}
  • 构造器解释了当使用类创建了一个实例后会发生什么。
  • morse::说明这个函数是morse类的一部分。
  • _pin表示在名字的前面加下划线是一种清楚地表示它是一个私有变量的惯例,同时也能让它和函数的参数区分开来(这个例子中的pin)。

3.3、编写keywords.txt文件

keywords.txt文件的作用是配置自定义库的语法高亮,使软件对函数等进行高亮处理。

keywords.txt文件内容如下:

#以Tab键隔开,而不是空格键。
morse	KEYWORD1
dash	KEYWORD2
dot	KEYWORD2
  • #开头的是注释。
  • 一行一句,格式如下:
    关键字 [Tab键] 关键字的类型

关键字的类型的值:

类型含义
KEYWORD1高亮类名(橙色)
KEYWORD2高亮方法名(褐色)
LITERAL1高亮常量

4、使自定义的库变成自己的库

方法一:将自定义的库添加进libraries目录

只有将自定义的库文件放在Arduino的库文件中,Arduino才会自动识别并导入自定义的库文件,那样才能在使用相应的库函数时而不会出现报错。Arduino的扩展库都是放在
libraries目录(路径:{arduino安装位置}./arduino/libraries)下,所以只需将总文件夹(包含.h、.cpp、keywords.txt三个文件)放在libraries目录下即可使自定义的库变成自己的库,就可以方便以后需要时直接拿来使用。

如下图所示:
在这里插入图片描述在这里插入图片描述

方法二:每次使用自定义库时把库文件包含进工程中

使用这种方法时,.ino主代码中引用库文件使用双引号""的,即#include "morse.h"

注意:.h和.cpp文件要与.ino主文件放在同一目录下。Arduino工程要求.ino名字要与工程名称一致。

如下图所示:
在这里插入图片描述

  • <>:表示先去系统目录中找头文件,如果没有则再到当前目录下找。所以像标准的头文件 stdio.h和 stdlib.h等用这个方法。

  • “”:表示首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。

5、使用自定义库后的主文件代码

5.1、使用方法一编写.ino主文件代码

使用自定义库后.ino文件中的代码可以改写为如下形式:

#include <morse.h>

morse morse1(13);//morse类的实例

void setup()
{
}

void loop()
{
  morse1.dot();morse1.dot();morse1.dot();
  morse1.dash();morse1.dash();morse1.dash();
  morse1.dot();morse1.dot();morse1.dot();
  delay(3000);
}

结果如下:
在这里插入图片描述

5.2、使用方法二编写.ino主文件代码

使用自定义库后.ino文件中的代码可以改写为如下形式:

#include "morse.h"

morse morse1(13);//morse类的实例

void setup()
{
}

void loop()
{
  morse1.dot();morse1.dot();morse1.dot();
  morse1.dash();morse1.dash();morse1.dash();
  morse1.dot();morse1.dot();morse1.dot();
  delay(3000);
}

结果如下:
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供的源资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源中配备了详细的注释和文档,帮助用户快速理解代结构和实现逻辑。 适用人群: 这些源资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源资源进行课程实践、课外项目或毕业设计。通过分析和运行源,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源资源的可运行性和易用性,特别注意了以下几点:首先,每份源都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源中的注释和文档都非常完善,方便用户快速上手和理解代;最后,我会定期更新这些源资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值