【arduino】利用servo库和一个摇杆控制两个小舵机

      材料

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);
}


 
1.Servo.h 控制舵机,舵机可以接 D0~D13 均能正常工作,A0~A5 舵机无反应, Servo库不能通过模拟口操作舵机,可以通过所有的数字口操作,原以为只能对pwm输出端操作舵机,可以同时控制14个舵机。

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);//设置舵机旋转的角度
}
   

猜你喜欢

转载自blog.csdn.net/g1fdgfgdf2_/article/details/78578690