目录
一、Servo库的作用及一些注意点
1.通过Servo库可以控制舵机。
2.舵机3条线分别是:红--+5V;棕--GND;橙--信号线。
3.a.通常舵机需要的供电功率比较高。当需要控制1个以上的舵机,必须使用单独的电源为舵机供电,而不能使用Arduion开发板的+5V引脚,为1个以上的舵机供电。
b.另外也请注意,如果使用独立电源为舵机供电,那么独立电源与Arduino必须共地(电源GND与Arduino的GND相互连接在一起)。
4.使用Servo库会影响arduino的某一些引脚的PWM功能(Mega除外)
对于除Mega开发板以外的Arduino开发板,当您使用Servo库时,开发板的9号和10号引脚的PWM功能是无法使用的。也就是说,您的Arduino程序如果使用了Servo库,无论9号和10号引脚上是否连接了舵机,那么这两个引脚是不能使用analogWrite()语句进行控制的。
对于Mega开发板,使用12个以下的舵机是不会影响开发板的PWM功能的。但如果使用12个以上的舵机,那么Mega开发板上的引脚11和引脚12是要受到影响的。
二、Servo库的函数介绍
1.attach ( )
a. 基本格式: name.attach(pin)
b. 解释:name:表示舵机名
pin:表示arduino上面舵机数据线连接的引脚
c. 功能:告诉arduino,这一个舵机的数据线连在哪一个引脚上面
2.write ( )
a. 基本格式: name.write(angle)
b. 解释:name:表示舵机名
angle:旋转角度
c. 功能:控制舵机旋转。
a. 对于标准舵机,write()函数会将舵机轴旋转到相应的角度位置。
b. 对于连续旋转类型的舵机,write()函数可以设置舵机的旋转速度(0指示舵机向着一个方向全速旋转,180指示舵机向着另一个方向全速旋转,90指示舵机静止不动。)
3.read ( )
a. 基本格式: name.read( )
b.解释:name:表示舵机名
(括号内无参数)
c. 功能:获取当前舵机轴角度信息(即上一次使用write()函数设置舵机轴的角度信息)
4.attached()
a. 基本格式: name.attached( )
b. 解释:name:表示舵机名
(括号内无参数)
c. 功能:检查某一个舵机对象是否连接在开发板引脚上(如果连上,则返回true;否则返回false)
5.detach()
a. 基本格式: name.detach( )
b.解释:name:表示舵机名
(括号内无参数)
c. 功能:将舵机对象与Arduino开发板断开连接。舵机一旦与Arduino开发板断开连接,则引脚9和引脚10PWM输出(analogWrite)功能将会恢复。
三、实例辅助理解和记忆
#include <Servo.h> //引用Servo库函数
Servo myservo; //建立一个名为myservo的舵机
int angle; //建立一个整形变量,储存舵机旋转角度
void setup() {
myservo.attach(9); //告诉arduino,舵机的信号线连在9号引脚上
myservo.write(0); //设置舵机的初始角度为0
Serial.begin(9600); //打开串口监视器,并设置波特率为9600
Serial.println(myservo.attached()); //连上则返回1;
}
void loop() {
for(angle=0;angle<=180;angle++){ //逆时针旋转,每增加1°,延迟15ms
myservo.write(angle); //令舵机达到angle的角度(当angle=100时,则舵机旋转到角度为10的位置)
Serial.println(angle); //将此时的角度显示在串口监视器内
delay(15);
}
for(angle=180;angle>=0;angle--){ //顺时针旋转,每增加1°,延迟15ms
myservo.write(angle);
Serial.println(angle);
delay(15);
}
}