第七节 Arduino的自定义函数和库
2015-04-22 14:53阅读:
一、Arduino自定义函数
如果你想编一些复杂点的程序,实现一些更眩的功能,你会发现你的loop程序会写得非常的长,有时候会搞不清楚具体的一个功能到底写在哪行了。能不能将一个功能的实现写在一个地方,如果要用的时候只要在loop主程序里调用一下就可以了呢?
答案当然是可以的,如果你已经学过了c语言等等,你或许已经知道如何来做了,那就是自定义函数。
自定义函数应该可以分为四类:
1、第一类是无返回值无参数类型。
例如你自定义一个函数:
void ledflash()
//定义一个名为ledflash的函数,
{
//函数的具体内容写在{}内
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
br>
}
//注意,函数的定义在
loop()循环之外。
那么只要在
loop()主程序内写上:
ledflash();
程序就自动回调用
ledflash函数,执行函数内容。
2、第二类是无返回值有参数类型。
运行第一类函数只能运行事先写好的程序,无法在调用的时候控制。那么这第二类函数就可以加入一个参数来控制了,例如:
void ledflash(int i)
//定义一个名为
ledflash的函数,
{
//函数的具体内容写在
{}内
digitalWrite(led,HIGH);
delay(i);
digitalWrite(led,LOW);
delay(i);
}
//注意,函数的定义在
loop()循环之外。
这类函数在调用的时候需要给它一个参数,例如:
ledflash(1000);
那么在调用函数的时候就会给函数内的
i变量赋值为
1000。
3、第三类是有返回值无参数类型
前两类函数都只是实现一个具体的功能,函数本身不会返回一个结果,那么第三类函数就可以实现运行函数后会返回一个值,例如:
int analogzhi()
//首先用
int定义这个函数返回的值得类型为
int型
{
int i;
//定义一个变量用于返回值
i=analogRead(A0);
return(i);
//返回
i的值
}
在调用的时候可以如下所示:
int a;
//先定义一个变量
a=analogzhi();
//令这个变量等于
analogzhi函数的返回值
4、第四类当然是既有返回值又有参数的函数
例如:
int jisuan(int i)
{
int j;
j=i*10;
return(j);
}
在调用的时候如下所示:
int a;
//先定义一个变量
a=jisuan(2);
//令这个变量等于
jisuan函数参数为
2时的值
现在你已经学习了如何使用函数来使你的程序变简单了,那么来尝试做一个复杂点的吧,例如,使用一个按钮模块,三个
Led灯,每按一下按钮,
Led灯就变换一种闪烁方式。注意,可以把每种闪烁方式写成一个函数,这样在
loop主程序中简单得调用这些函数就可以了。
二、Arduino的库
使用了函数,程序就变得更清楚明白了。但是有些时候,如果我编了一段可以实现一个复杂功能的函数,又想给别人用时,如果直接来拷贝函数的话,往往会出现很多问题。如果能把自己写的一段函数写在另外的文件中,其他人只要拷贝了你的文件,然后再程序中直接调用你的文件就可以使用你编的函数,那大家就可以共享自己的程序了。这就是
Arduino的库函数,其实我们在使用
analogRead之类的函数时,已经在使用了,只是这些是
Arduino自带的库,其实我们也可以自己定义自己的库函数。
当然,写库函数这件事情现在对我们来说有点难,我们先学习如何使用它们吧。下面我们来玩一种液晶屏,一般来说如果用
Arduino来驱动液晶屏的话要使用很复杂的一些程序,不过已经有人帮我们写好了这些函数,我们只用调用这些库就可以很简单的使用了,先来认识一下
1602液晶屏吧:

可以看到这种
IIC接口的
LCD1602有四个端口,其中除了电源的两个端口外还有
SDA和
SDL两个接口,在连接的时候将
SDA连接
Arduino的
A4端,
SCL连接
Arduino的
A5
端。现在打开浏览器,输入
http://pan.baidu.com/s/132VWa,下载我共享的库函数
LiquidCrystal_I2C.rar,下载好后请解压缩到名为
LiquidCrystal_I2C的文件夹,得到名为
LiquidCrystal_I2C的文件夹,双击文件夹,确定里面有两个文件夹和
4个文件,而不是再一层的
LiquidCrystal_I2C的文件夹。然后我们将这个
LiquidCrystal_I2C的文件夹复制到
Arduino程序目录下的
libraries文件夹内。如果你是直接安装的,那么这个
libraries文件夹在
C:\ProgramFiles\Arduino\libraries。复制好后,你就可以直接使用这个库函数了。你甚至可以在
Arduino程序的文件
-示例里找到
LiquidCrystal_I2C的例程,不过我们先不用这几个例程,直接写入以下程序:
#include
#include
//这里就是调用
LiquidCrystal_I2C库函数
LiquidCrystal_I2Clcd(0x27,20,4);
//LiquidCrystal_I2C的一些初始化定义
void setup()
{
lcd.init();
//
初始化
lcd
}
void loop()
{
lcd.init();
lcd.backlight();
//背光控制
lcd.setCursor(3,0);
//第一个字符的位置
lcd.print('Hello, world!');
//输出字符到
lcd
lcd.setCursor(2,1);
lcd.print('good!');
delay(10000);
}
可以看到,
LiquidCrystal_I2C库已经帮我们写好了如何在
lcd上输出字符的函数,现在,尝试着用这块
lcd来做点什么吧,例如结合温度模块做个数字温度计等等。