请教关于ARDUINO控制三个以上舵机程序问题?
如何同时控制三个以上舵机的运动,舵机运动方向不同,动作是缓慢的循环左右转动。要求三个舵机有各自的行程和速度,我写了段代码,是调用的servo.h的舵机函数控制的,但是都是一个个的接着动并不是一起动。
void loop()
{
for(pos1 = 20; pos1 < =180; pos1 += 1)
{myservo1.write(pos1);
delay(15);}
for( pos2 = 90; pos2 >= 10; pos2 -= 1)
{ myservo2.write(pos2);
delay(15);}
for(pos3 = 20; pos3 < 120; pos3 += 1)
{ myservo3.write(pos3);
delay(15);}
for(pos1 = 180; pos1 > =20; pos1 -= 1)
{myservo1.write(pos1);
delay(15);}
for( pos2 = 10; pos2 <= 90; pos2 += 1)
{ myservo2.write(pos2);
delay(15);}
for(pos3 = 120; pos3 >=20; pos3 -= 1)
{ myservo3.write(pos3);
delay(15);}
}这是一个接一个的代码,不知道怎么改才可以三个一起动,谢谢 你每个舵机转动循环完了,然后再delay(15),那肯定是一个接一个动了。
每一个舵机转动一个步长,然后马上让下一个舵机转动一个步长,以此类推,就能够同时运动了。 那么各舵机方向,速度 和角度大小都不同如何 用一次循环实现呢。 加标志变量,分别进行控制 本帖最后由 Hansmuller_8 于 2012-1-11 11:05 编辑
今天想出一个写法,用的是ARDUINO的自带MAP缩放函数,测试运动了瞒不错。这样写的一个作用是,无论几个舵机,运动角度范围多大每次的动作都是同步结束,也就是距离短的舵机动作慢,长的动作快,同时完成各自动作
void loop()
{
int x;
for(x = 0; x< =180; x+=2)
{ int pos1=map(x,0,180,90,120);
int pos2=map(x,0,180,30,60);
int pos3=map(x,0,180,20,50);
myservo1.write(pos1);
myservo2.write(pos2);
myservo3.write(pos3);
delay(10);
}
for(x = 180; x< =0; x+=2)
{ int pos1=map(x,180,0,120,90);
int pos2=map(x,180,0,60,30);
int pos3=map(x,180,0,50,30);
myservo1.write(pos1);
myservo2.write(pos2);
myservo3.write(pos3);
delay(10);
}
} Hansmuller_8 发表于 2012-1-11 10:53 static/image/common/back.gif
**** 作者被禁止或删除 内容自动屏蔽 ****
不错,学习了。。。不过对于map()函数,不用专门写两个for(),因为如果从90-120不但可以写成这样:int pos1=map(x,0,180,90,120);而且120-90也可以写成这样:int pos1=map(x,0,180,120,90);只要保持循环语句都是for(x = 0; x< =180; x+=2)就行了。
学习一下了!!!!!!!!!! 学习了学习了。
页:
[1]