himawaliss 发表于 2015-9-28 19:11:00

arduino 控制SERVO的代码

大家好,我想写一个代码:
将信号“0”输入arduino, 则servo不动。
将信号“1”输入arduino, 则servo转动20°。每给一个“1”就转动20°直到转到180°后开始反转。
问题:
1,arduino可以读出servo的位置么?我想将代码写成输入“1”后servo转到相应的角度(即当前位置+20°),但是我不知道用什么代码读出servo的位置。或者大家有没有更好的建议?
2,当arduino转到180°后开始反转,这个代码我也不知道怎么写。

请大家帮帮我,谢谢啦!

林定祥 发表于 2015-9-28 19:52:31

请对几种电机了解下,直流电机,伺服电机,舵机,根据指令控制电机角度应该使用舵机,角度控制自成体系。

himawaliss 发表于 2015-9-28 20:19:14

林定祥 发表于 2015-9-28 19:52 static/image/common/back.gif
请对几种电机了解下,直流电机,伺服电机,舵机,根据指令控制电机角度应该使用舵机,角度控制自成体系。

你没有认真看我的问题。第一,servo就是舵机。第二,我想知道怎么读出servo的当前角度。
我知道可以用write()直接让servo到指定角度,但是我想用write(当前角度+20°)。所以我的问题是当前角度怎么读出?

lm4766 发表于 2015-9-28 22:51:47

可以私聊我811146927

afei420 发表于 2015-9-29 08:12:21

本帖最后由 afei420 于 2015-9-29 08:14 编辑

180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电平自加1,再*20。还是不难吧?

himawaliss 发表于 2015-9-29 10:40:40

afei420 发表于 2015-9-29 08:12 static/image/common/back.gif
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电 ...

那请问当到达180°后,要反转。这个怎么写?

himawaliss 发表于 2015-9-29 14:23:25

afei420 发表于 2015-9-29 08:12 static/image/common/back.gif
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电 ...

if (packetBuffer=='1'){
      for (int i=0;i<9;i=i+1){
          myServo.write(20*(i+1));
          delay(2000);
      }是这样计数器么?我现在是收到1就一个循环,我想把1放进循环里面。就是输入1,就只动20°。请问怎么改?

afei420 发表于 2015-9-30 08:57:22

要反转,你只要确定这个累加的值是否已经到9,到了9,来个1,就让它自减1,就反转了。

himawaliss 发表于 2015-10-1 10:56:37

afei420 发表于 2015-9-30 08:57 static/image/common/back.gif
要反转,你只要确定这个累加的值是否已经到9,到了9,来个1,就让它自减1,就反转了。

if (packetBuffer=='1'){
      for (int i=0;i<=9;i=i+1){
          myServo.write(20*(i+1));
          delay(2000);
          }
      for(int i=9;i>=0;i=i-1){
      myServo.write(20*(i-1));
      delay(2000);
      }
   }我现在是这样写的,但是我只要给个1,舵机就完成0-180,180-0.
我想每给个1只转动20°。请问应该怎么改代码?应该不是把if语句放在for语句的下面吧?

henrypcw 发表于 2015-10-2 15:58:36

最简单舵机测试程序,自己参考下:
int pos = 0;
void loop()
{
for(pos = 0; pos < 180; pos += 1)// goes from 0 degrees to 180 degrees
{                                  // in steps of 1 degree
    myservo.write(pos);            // tell servo to go to position in variable 'pos'
    delay(1);                     // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1)   // goes from 180 degrees to 0 degrees
{                              
    myservo.write(pos);            // tell servo to go to position in variable 'pos'
    delay(1);                     // waits 15ms for the servo to reach the position
}
}
页: [1]
查看完整版本: arduino 控制SERVO的代码