原文来自: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. Illegal instruction报错 c/c++

    报错 # ./agent Illegal instruction# 原因 myLog(log4cplus::INFO_LOG_LEVEL, g_p_debugLog, "sendLog ip ...

  2. MPL心得

    1.右值引用变量是个左值,把一个右值引用参数继续传递给其他函数调用时,需要使用std::forward否则会按照左值匹配 2.const T和T const在匹配模板参数的时候是相同的,而const ...

  3. Java的字符串操作

    目录 Java的字符串操作 一.不同字符串操作的对比 1.1 C++中const修饰指针 const在星号的左边,是被指向的常量不可变 const在星号的右边,是指针的指向不可变 二. Java字符串 ...

  4. Codeforces 1337C Linova and Kingdom

    题意 给你一颗有根树,你要选择\(k\)个点,最大化\(\sum_{i \in S} val_i\),其中\(S\)是被选点的集合,\(val_i\)等于节点\(i\)到根的路径上未被选择点的个数. ...

  5. 【Nginx】面试官:给我讲讲Nginx如何实现四层负载均衡?

    写在前面 这次又被问到Nginx四层负载均衡的问题了,别慌,我们一起来细细分析这个看似简单的问题. 如果文章对你有点帮助,请关注 冰河技术 微信公众号,点赞.在看.留言和转发,大家的四连是我持续创作的 ...

  6. 【小白学PyTorch】8 实战之MNIST小试牛刀

    文章来自微信公众号[机器学习炼丹术].有什么问题都可以咨询作者WX:cyx645016617.想交个朋友占一个好友位也是可以的~好友位快满了不过. 参考目录: 目录 1 探索性数据分析 1.1 数据集 ...

  7. Fragment时长统计那些事

    注:本文同步发布于微信公众号:stringwu的互联网杂谈 frament时长统计那些事 页面停留时长作为应用统计的北极星指标里的重要指标之一,统计用户在某个页面的停留时长则变得很重要.而Fragme ...

  8. 微信开发者工具集成GitHub,多人协调开发,上传拉取等

    一,准备环境 1,提前安装git环境和GitHub做集成,不做多解释: 1,准备微信项目代码: 2,创建GitHub仓库: 二,创建GitHub仓库 1,创建一个空的GitHub仓库,不要任何文件和不 ...

  9. list列表(也叫数组),以及常用的一些方法

    列表的表达: 元祖tuple,元祖是不可被修改的列表 1.列表的增,list.append(元素).或list.insert(index,元素) 2.列表的删,list.pop(可指定index也可不 ...

  10. 生成token和获取token

    1.先安装模块pip install itsdangerous 举个例子:一个用户登录成功后,讲username和token作为key,value写到redis里面,判断是否失效(1.时间到了失效,2 ...