原文来自:https://www.arduino.cn/thread-31720-1-1.html

上一篇:Arduino教程——通过 库管理器 添加库 http://www.arduino.cn/thread-31719-1-1.html
库管理器可以很方便的添加第三方库,但其中只提供了一些常用的库资源,如果需要添加更多的库资源或者自定义的库,那就需要用户自己准备找到或编写库。大部分开发者都喜欢将他们编写的Arduino库放到开源社区上分享。
Github 是全球最大git服务提供商,也是最大的开源社区之一,很多常用的Arduino库,都可以通过Github找到。Arduino官方网站Arduino中文社区 上也可以找到很多库资源。
 
还是以SR04超声波传感器模块为例,你可以在以下网址下载到这个类库:http://clz.me/101-book/lib/sr04/
在该页面可以看到SR04 lib的下载链接,下载后,你会得到一个名为SR04.zip的文件。
arduino IDE >= 1.8.0:
解压该文件,并将解压出的SR04文件夹放到 我的文档/Arduino/libraries中,如 C:\Users\奈何col\Documents\Arduino\libraries
arduino IDE < 1.8.0
解压该文件,并将解压出的SR04文件夹放到Arduino IDE的所在文件夹中的libraries文件夹内,如D:\Program\arduino-1.6.11\libraries(如图4-1)。
<ignore_js_op>

图4-1 Arduino第三方库存放文件夹.png (73.93 KB, 下载次数: 83)

下载附件

2016-12-13 15:28 上传

 
图4-1 Arduino第三方库存放文件夹
libraries文件夹中存放的是Arduino的各种类库,当将类库放入其中后,便可以在编写程序时调用它们。
 
再打开Arduino IDE,你可以在 Arduino IDE菜单>文件>示例 中看到新增加的SR04选项,点击即可打开SR04类库的示例程序(如图4-2)。
<ignore_js_op>

图4-2 打开超声波示例程序.png (309.78 KB, 下载次数: 52)

下载附件

2016-12-13 15:32 上传

 
图4-2 打开超声波示例程序
通过阅读类库的示例程序,你能更快了解该类库的使用方法。
SR04_Example内容如下:

kittenblock中小学创客名师推荐的图形化编程软件

 
//声明该程序要使用SR04类库
 
#include "SR04.h"
 
//实例化一个对象,并初始化连接的引脚
 
//TrigPin连接到2号引脚
 
//EchoPin连接到3号引脚
 
SR04 ultrasonic = SR04(2,3);
 
void setup()
 
{
 
  Serial.begin(9600);
 
}
 
void loop()
 
{
 
  //使用GetDistance()函数获取当前超声波传感器返回的距离值
 
  //并存入变量distance中
 
  float distance=ultrasonic.GetDistance();
 
//输出测得的距离
 
Serial.print(distance);
 
  Serial.print("cm");
 
  Serial.println();
 
}
编译并下载程序到你的Genuino 101中,你将获得与之前超声波测距程序一样的效果。
我们再来看看这个示例程序是如何调用这个类库的。
首先程序中使用了
语句,声明该程序会调用SR04类库。接着,使用
建立了一个SR04类型,名为ultrasonic的对象,你也可以其他名字命名这个对象。
该对象代表了我们正在使用的这个超声波传感器。并且,这里调用SR04类的构造函数对我们新建的这个对象进行了初始化,指定了该传感器连接的Genuino 101的引脚。
        需要注意的是这里的类型、对象、构造函数的区别,如图4-3所示
<ignore_js_op>

图4-3.png (4.71 KB, 下载次数: 40)

下载附件

图4-3 区分类型、对象、构造函数

2016-12-13 11:41 上传

 
图4-3 区分类型、对象、构造函数
 
接着,在loop函数中,我们还使用了如下语句:

kittenblock中小学创客名师推荐的图形化编程软件

   
 
float distance = ultrasonic.GetDistance();
GetDistance() 是SR04类中的成员函数,它可以返回当前传感器测得的距离。而ultrasonic.GetDistance(),即是返回sr04这个对象测得的距离。该返回值为float类型,因此,我们还声明了一个float类型的变量,来存储这个返回值,并在此后的程序中使用。
由上可看出,使用类库编写程序,你需要编写的代码减少了,程序的可读性提高了,编程工作更加直观和方便。
 
一些常见的单片机开发,都使用的是纯C语言,并没有使用面向对象的思想,而Arduino引入面向对象的思想,无疑是程序更加容易理解和编写。我们可以将Arduino上连接的硬件设备都看作是一个对象,对其进行编程操作。
例如,同时操作两个SR04超声波传感器时,你只需要先建立两个SR04类型的对象,并分别调用对象的成员函数即可。
示例程序代码如下:

kittenblock中小学创客名师推荐的图形化编程软件

   
 
#include "SR04.h"
 
// 实例化两个SR04对象,并初始化连接的引脚
 
SR04 ultrasonic1 = SR04( 2, 3);
 
SR04 ultrasonic2 = SR04( 4, 5);
 
void setup()
 
{
 
  Serial.begin(9600);
 
}
 
void loop()
 
{
 
  // 分别调用GetDistance () 函数获取当前超声波传感器返回的距离值
 
  // 并存入变量distance中
 
  float distance1 = ultrasonic1.GetDistance ();
 
float distance2 = ultrasonic2.GetDistance ();
 
// 分别输出两个超声波传感器测得的距离
 
Serial.print(distance1);
 
  Serial.print("cm");
 
Serial.print(distance2);
 
  Serial.print("cm");
 
  Serial.println();
 
}

通过以上程序,你便可以同时使用两个超声波传感器了。
Arduino还有很多第三方的类库可以使用,你可以在Github.com、Arduino.cc、Arduino.cn等开源社区上找到更多的类库。Arduino的优势也在于此,借助开源社区的资源,即使你不清楚某个器件的驱动原理,如果该器件有第三方的Arduino类库,通过学习例程,你便可以对这个器件加以使用。 此后的章节中我们还会用到其他第三方类库,其安装方法均和本节所讲的方法一致。
下一篇:Arduino教程——编写Arduino类库(1) http://www.arduino.cn/thread-31721-1-1.html

Arduino教程——使用和编写类库   http://www.arduino.cn/thread-22293-1-1.html Arduino教程——通过 库管理器 添加库 http://www.arduino.cn/thread-31719-1-1.html Arduino教程——手动添加库并使用 http://www.arduino.cn/thread-31720-1-1.html Arduino教程——编写Arduino类库(1) http://www.arduino.cn/thread-31721-1-1.html Arduino教程——编写Arduino类库(2) http://www.arduino.cn/thread-31722-1-1.html Arduino教程——编写Arduino类库(3) http://www.arduino.cn/thread-31723-1-1.html

别人写的很好Arduino教材的更多相关文章

  1. 修改别人写的Hibernate数据库操作代码

    最近正在维护别人写的一个关于Hibernate操作数据库的项目,在运行测试的时候(向表中插入记录),报了一个错误:cannot insert a null into column(XXX字段名,下文统 ...

  2. 前端读者 | 别人写的css,你敢用吗?

    本文来自@yeaseonzhang:链接:http://yeaseonzhang.github.io/2018/04/10/%E5%88%AB%E4%BA%BA%E5%86%99%E7%9A%84cs ...

  3. 修改别人写的利用AOP实现日志监控的问题

    原文链接 http://blog.csdn.net/jaune161/article/details/51476138 想法 看到原文博主写的这篇文章,我感觉写的很好,可以在我们的项目中使用AOP来监 ...

  4. Oracle,Sql,procedure 感觉自己写的很棒的一个存储过程

    感觉自己写的很棒的一个Oracle存储过程,(其实想说很叼^,^). 集成了一堆操作数据的功能(至少几十), 包括存储过程执行异常信息输出帮助诊断. 亮点很多, 比如`over(partition b ...

  5. 既然写CSS很容易,那为什么大家还是把CSS写的那么烂呢?

    在众成翻译上看到一篇不错的css文章,所以就给转过来. 在你开始阅读这篇文章之前,一定要做好心理准备.因为我写的 90% 都是在发牢骚,只有最后大概 10% 介绍 CSS 技巧之最佳实践.提前给你们打 ...

  6. 说明你javascript写的很烂的5个问题

    Javascript在互联网上名声很臭,但你又很难再找到一个像它这样如此动态.如此被广泛使用.如此根植于我们的生活中的另外一种语言.它的低学习门槛让很多人都称它为学前脚本语言,它另外一个让人嘲笑的东西 ...

  7. java面试必备知识点-上中下三篇写的很详细

    参考博客:写的还是相当的经典 http://www.cnblogs.com/absfree/p/5568849.html 上中下三篇写的很详细 http://blog.csdn.net/riverfl ...

  8. 细说ASP.NET Forms身份认证 别人写的不过很透彻就转来了以后用时再看

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  9. ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻

    一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问 ...

随机推荐

  1. laravel在视图中使用类似于“__PUBLIC__”,“__UPLOADS__”的操作

    首先在config文件夹下建立static.php文件 然后在里面定义常量 例: <?php define('__PUBLIC__', '/'); define('__UPLOADS__', ' ...

  2. android开发之edittext弹出输入框遮挡住文字。解决方法

    在ManiFest清单文件中修改被遮挡的类的EditText android:windowSoftInputMode="adjustPan|stateHidden"

  3. 数据库系统第一章【绪论】(B站视频)

    目录 数据库系统第一章[绪论](B站视频) 一.绪论 数据库的四大基本概念 数据 数据库 数据库管理系统 主要功能 数据库系统 数据管理 我的理解 数据系统的特点 数据结构化 数据系统的共享性 数据独 ...

  4. [BUUOJ记录] [BJDCTF 2nd]old-hack & Schrödinger & elementmaster

    三道比较简单的的题放一起一写,old-hack是ThinkPHP框架的一个nday,Schrödinger和elementmaster没啥考点,就是脑洞 一.old-hack 进入题目没发现什么Hi ...

  5. Beware of the encrypted VM

    A friend of mine Megan told me that she got an error message as below screenshot when trying to open ...

  6. Activiti7 流程部署

    首先先绘制一个流程图 创建bpmn文件 然后绘制好节点 然后修改节点信息 指定负责人 点击背景,修改ID和名称 保存 然后重命名成xml 使用diagram打开 导出png 然后包xml改回bpmn ...

  7. Poi Excel 设置列宽计算公式

    int width = 40;sheet.setColumnWidth(0,252*width+323); 作者:彼岸舞 时间:2020\07\27 内容关于:工作中用到的小技术 本文来源于网络,只做 ...

  8. String.format与搭配转化符的使用

    String的format语法搭配转化符,在格式化输出方面效果特别好,值得掌握. 例程: System.out.println("----C1---|----C2---|----C3---| ...

  9. docker打包项目

    nginx镜像制作实战 docker容器的主业 docker理念里,容器启动时,应当为它指定主业是什么,如nginx容器主业就是nginx代理服务,tomcat容器就是web服务等等 1.容器创建时, ...

  10. Java实现获取命令行中的指定数据

    构造一个ping的命令类这个类中可以设置需要ping的目标域名类提供方法public void exec();方法执行完毕后可以读取ping的次数,ping的成功回应包个数ping的丢包个数,ping ...