制作Arduino库——摩斯码

  • 前沿
  • 1、文件结构
  • 2、主文件代码
  • 3、自定义Arduino库
    • 3.1、编写.h头文件
    • 3.2、编写.cpp源文件
    • 3.3、编写keywords.txt文件
  • 4、使自定义的库变成自己的库
    • 方法一:将自定义的库添加进libraries目录
    • 方法二:每次使用自定义库时把库文件包含进工程中
  • 5、使用自定义库后的主文件代码
    • 5.1、使用方法一编写.ino主文件代码
    • 5.2、使用方法二编写.ino主文件代码

前沿

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);
}

结果如下:

制作Arduino库——摩斯码相关推荐

  1. 前端实现中文摩斯码制作翻译工具

    摩斯密码全称摩尔斯电码,是由M国人摩尔斯在1837年发明.从外表来看,它是由点dot(.)划dash(-)这两种符号所组成的一组时通时断的字符串.摩尔斯码在早期的无线电上作用是非常大的,它是每个无线电 ...

  2. python回声程序 一行代码_python实现的比较完成的带声音的摩斯码翻译程序的代码...

    将写代码过程较好的一些代码段做个珍藏,如下代码段是关于python实现的比较完成的带声音的摩斯码翻译程序的代码,希望能对各朋友有所用处. import pygame import time impor ...

  3. python的翻译方式-python实现带声音的摩斯码翻译实现方法

    本文实例讲述了python实现带声音的摩斯码翻译程序,分享给大家供大家参考.具体分析如下: 这里需要使用PyGame来发出声音. import pygame import time import sy ...

  4. 嵌入式开发学习之--用蜂鸣器来传递摩斯码

    本篇文章致力于从开发的角度思考问题,而不是搞学术的东西. 文章目录 前言 一.项目概况 1.1项目需求 1.2项目来源 1.3项目开发环境 1.4项目意义 二.开发步骤 2.1了解什么是摩斯码 2.2 ...

  5. python 录音翻译_python实现带声音的摩斯码翻译实现方法

    本文实例讲述了python实现带声音的摩斯码翻译程序,分享给大家供大家参考.具体分析如下: 这里需要使用PyGame来发出声音. import pygame import time import sy ...

  6. 80行代码实现简易版摩斯码编译器

    @80行代码实现简易摩斯码翻译器 dict1={ #字母转换成摩斯码"A":"01","B":"1000"," ...

  7. CTF-Show密码学【摩斯码、培根密码】

    萌新 密码33 一.题目信息 题目名称:我想吃培根 题目描述:-- - .-. - . -–.- - - -–.- -.-. - - .-- -–.- -- -- - -–.- -- .- -.-. ...

  8. 好玩的Python-摩斯码发报机

    这篇文章介绍利用Python声音模块驱动电脑的音响或者蜂鸣器模拟发报机的声音,实现一个摩斯码发报机. 1 winsound发声 要模拟发报机声音首先要能让电脑发出声音,可以用winsound模块的Be ...

  9. 摩尔斯码(Morse Code)

    尔斯电码莫尔斯电码(Morse code)是美国人莫尔斯(Samuel Finley Breese Morse)于1837年发明的, 由点dot(.).划dash(-)两种符号组成. 1.一点为一基本 ...

最新文章

  1. r720支持多少频率的内存吗_关于内存频率,高频和低频的性能差距大吗?明白这3点很重要...
  2. php小白书,php小白的自学第一天
  3. 解决IE6透明PNG图片的代码
  4. Python将绝对路径转换为相对路径方法实例
  5. linux gcc/g++编译参数 -l(大写i)-L(大写l) -l(小写l)
  6. IOS 混合开发 手势返回控制
  7. 寂寞的最初,爱情不过如此
  8. 不可或缺那就现在安排,22款奔驰GLE350升级ACC自适应巡航系统
  9. 对List<Map>数据排序
  10. Git - 时光机穿梭
  11. 如何利用石墨文档进行团队协作
  12. leaflet实现风场动态粒子效果
  13. vue+iview 兼容IE11浏览器
  14. php导入excel文件时间,PHPExcel导入Excel文件并对其日期单元格处理的代码示例
  15. ESP8266 AP模式热点
  16. Notion——Android版下载与注册登录
  17. 2017年5月历史文章汇总
  18. httpclient调用京东万象数字营销频道新闻api实例
  19. 热敏电阻、NTC基本概念
  20. android桌面文件夹,打造清新手机桌面 5款安卓桌面文件夹合辑推荐

热门文章

  1. Dapper官方文档(一)【介绍】
  2. Node -- 使用场景及优缺点
  3. STM32下载出错:flash timeout.reset the target and try it again
  4. ubuntu 18.04 安装 wps office
  5. mxgraph html5,mxgraph进阶(四)mxGraph再启程
  6. 欧拉计划 31~40
  7. Unity3d 鼠标的事件GetMouseButtonDown()、GetMouseButton()、GetMouseButtonUp()
  8. HTTPError: 404 Client Error: Not Found for url: https://mirrors.cn/anaconda/pkgs/free
  9. 8.WLAN频段介绍_频段与信道
  10. Fiddler抓包实战