材料
arduino uno
摇杆模块x1
SG90舵机x2
面包线
两轴云台(非必需)
代码
#include <Servo.h>
Servo myservo1;//创建伺服器对象
Servo myservo2;//创建伺服器对象
int seroverdown = 9; //定义舵机信号线接口
int seroverup = 10; //定义舵机信号线接口
int psx = 1;//定义摇杆信号线接口
int psy = 2;//定义摇杆信号线接口
int valx;//定义变量,从摇杆接口读取值(0-1023,不过一般取不到,大概在90-900多左右)
int valy;//定义变量,从摇杆接口读取值(0-1023,不过一般取不到,大概在90-900多左右)
void setup()
{
Serial.begin(9600);
pinMode(psx, OUTPUT);
pinMode(psy, OUTPUT);
myservo1.attach(9);
myservo2.attach(10);
}
void loop()
{
valx = analogRead(psx);
valy = analogRead(psy);
valx = map(valx,0,1023,0,179);
valy = map(valy,0,1023,0,179);
Serial.println(valx, DEC);
Serial.println(valy, DEC);
myservo2.write(179-valx);
myservo1.write(179-valy);//根据实际情况,测试摇杆转动方法和舵机方向一致,or myservo.write(val);
delay(15);
}
2.Servo库和pwm输出有冲突;
将Servo接2个舵机,并将 pwm控制呼吸灯程序融合进去,运行发现
呼吸灯频率快了很多,舵机无法工作
结论:Servo库确实和pwm输出有冲突,无法同时使用。
在常见的 超声波传感器+舵机+电机驱动板 制作智能小车中,如果用Servo库控制安装超声波的舵机,则无法使用pwm对智能小车进行调速。
#include <Servo.h>
Arduino自带的Servo函数及其语句,先来介绍一下舵机函数的几个常用语句吧。
1、attach(接口)——设定舵机的接口,只有9或10接口可利用。
2、write(角度)——用于设定舵机旋转角度的语句,可设定的角度范围是0°到180°。
3、read()——用于读取舵机角度的语句,可理解为读取最后一条write()命令中的值。
4、attached()——判断舵机参数是否已发送到舵机所在接口。
5、detach()——使舵机与其接口分离,该接口(9或10)可继续被用作PWM接口。
注:以上语句的书写格式均为“舵机变量名.具体语句()”例如:myservo.attach(9)。
下面就来具体分析一个小程序。
#include <Servo.h>//定义头文件,这里有一点要注意,可以直接在
Arduino软件菜单栏单击Sketch>Importlibrary>Servo,调用Servo函数,也可以直接输入#include <Servo.h>,但是在输入时要注意在#include 与<Servo.h>之间要有空格,否则编译时会报错。
Servo myservo;//定义舵机变量名
void setup()
{
myservo.attach(9);//定义舵机接口,9或10
}
void loop()
{
myservo.write(90);//设置舵机旋转的角度
}