极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21342|回复: 7

请教关于ARDUINO控制三个以上舵机程序问题?

[复制链接]
发表于 2012-1-10 14:44:59 | 显示全部楼层 |阅读模式


如何同时控制三个以上舵机的运动,舵机运动方向不同,动作是缓慢的循环左右转动。要求三个舵机有各自的行程和速度,我写了段代码,是调用的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);  }
}这是一个接一个的代码,不知道怎么改才可以三个一起动,谢谢
回复

使用道具 举报

发表于 2012-1-10 17:15:59 | 显示全部楼层
你每个舵机转动循环完了,然后再delay(15),那肯定是一个接一个动了。

每一个舵机转动一个步长,然后马上让下一个舵机转动一个步长,以此类推,就能够同时运动了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-10 17:19:15 | 显示全部楼层
那么各舵机方向,速度 和角度大小都不同如何 用一次循环实现呢。
回复 支持 反对

使用道具 举报

发表于 2012-1-11 09:57:23 | 显示全部楼层
加标志变量,分别进行控制
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-11 10:53:58 | 显示全部楼层
本帖最后由 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);  
   
    }
}
回复 支持 反对

使用道具 举报

发表于 2013-4-8 22:46:26 | 显示全部楼层
Hansmuller_8 发表于 2012-1-11 10:53
**** 作者被禁止或删除 内容自动屏蔽 ****

不错,学习了。。。不过对于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)就行了。                  
回复 支持 反对

使用道具 举报

发表于 2015-6-9 15:09:11 | 显示全部楼层
学习一下了!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2015-6-18 21:32:51 | 显示全部楼层
学习了学习了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-17 15:01 , Processed in 0.043422 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表