极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17550|回复: 9

arduino 控制SERVO的代码

[复制链接]
发表于 2015-9-28 19:11:00 | 显示全部楼层 |阅读模式
大家好,我想写一个代码:
将信号“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 | 显示全部楼层
请对几种电机了解下,直流电机,伺服电机,舵机,根据指令控制电机角度应该使用舵机,角度控制自成体系。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-28 20:19:14 | 显示全部楼层
林定祥 发表于 2015-9-28 19:52
请对几种电机了解下,直流电机,伺服电机,舵机,根据指令控制电机角度应该使用舵机,角度控制自成体系。

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

使用道具 举报

发表于 2015-9-28 22:51:47 | 显示全部楼层
可以私聊我811146927
回复 支持 反对

使用道具 举报

发表于 2015-9-29 08:12:21 | 显示全部楼层
本帖最后由 afei420 于 2015-9-29 08:14 编辑

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

使用道具 举报

 楼主| 发表于 2015-9-29 10:40:40 | 显示全部楼层
afei420 发表于 2015-9-29 08:12
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电 ...

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

使用道具 举报

 楼主| 发表于 2015-9-29 14:23:25 | 显示全部楼层
afei420 发表于 2015-9-29 08:12
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电 ...
  1.   if (packetBuffer[0]=='1'){
  2.         for (int i=0;i<9;i=i+1){
  3.           myServo.write(20*(i+1));
  4.           delay(2000);
  5.         }
复制代码
是这样计数器么?我现在是收到1就一个循环,我想把1放进循环里面。就是输入1,就只动20°。请问怎么改?
回复 支持 反对

使用道具 举报

发表于 2015-9-30 08:57:22 | 显示全部楼层
要反转,你只要确定这个累加的值是否已经到9,到了9,来个1,就让它自减1,就反转了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-1 10:56:37 | 显示全部楼层
afei420 发表于 2015-9-30 08:57
要反转,你只要确定这个累加的值是否已经到9,到了9,来个1,就让它自减1,就反转了。
  1.   if (packetBuffer[0]=='1'){
  2.         for (int i=0;i<=9;i=i+1){
  3.           myServo.write(20*(i+1));
  4.           delay(2000);
  5.           }
  6.         for(int i=9;i>=0;i=i-1){
  7.         myServo.write(20*(i-1));
  8.         delay(2000);
  9.         }
  10.      }
复制代码
我现在是这样写的,但是我只要给个1,舵机就完成0-180,180-0.
我想每给个1只转动20°。请问应该怎么改代码?应该不是把if语句放在for语句的下面吧?
回复 支持 反对

使用道具 举报

发表于 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
  }
}
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 19:33 , Processed in 0.066159 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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