舵机运行时间一个小问题
本帖最后由 chylove 于 2013-5-22 18:41 编辑麻烦大家看一下:
例如一个程序:
servo函数库定义、初始化省略。
int run()
{
for(i=0;i<=180;i++)
{
int pos1=map(i,0,180,50,60);
int pos2=map(i,0,180,60,50);
int pos3=map(i,0,180,50,60);
servo1.write(pos1);
servo2.write(pos2);
servo3.write(pos3);
delay(5);
}
}
void loop()
{
run();
}
请问在run函数内每个舵机是多长时间写入一次角度。忽略map的运行时间?是20+5=25ms还是20x3+5=65ms?抑或其他?
跪求各位大哥大姐指教。。。毕业论文马上要交了,要处理一些数据,麻烦大家帮帮忙。不胜感激!! 晚上试试
再跟你说结果
OK,谢谢啦O(∩_∩)O~ 学长 发表于 2013-5-21 14:12 static/image/common/back.gif
晚上试试
再跟你说结果
OK,谢谢啦O(∩_∩)O~ 本帖最后由 学长 于 2013-5-21 22:27 编辑
先贴图跟代码 再解释
接线实拍
跟代码及代码运行
接下来贴代码/*问题来源
*http://www.geek-workshop.com/thread-4655-1-1.html
*/
#include <Servo.h>
Servo myservo;
int val= 0 ;
void setup()
{
Serial.begin(9600);
myservo.attach(4);
}
void loop()
{
if (val == 0) {
val = 180;
} else {
val = 0;
}
myservo.write(val);
Serial.println(val);
delay(1500);
}
接下来说明
主要问题就是
myservo.write(val);之後
到底是等 servo 转完 再执行下一行, 还是直接执行下一行, 不管 servo 有没有转完。
实验结果:
myservo.write(val); 之後, Servo 开始转动, 并且 Serial 输出角度数值。
Serial 输出数值时, Sever 并未转到定位。
所以推论得知, myservo.write(val); 之後, 并不会等待 Servo 转动到定位再执行下一行。
所以开始回答你的问题
每个舵机多久写入一次 .
不一定, 但实际上空 loop 大约 5xxus 以上。(不加 run 函数的执行时间)
不是 25ms 也不是 65 ms ,
而是两种情况
1. 在 for 内... 所有指定执行的时间,
2. 在 loop 内.. loop 执行时间,
所以, 在此指出2 个问题
1. 控制舵机不像其他步进马达, 如非特殊须要, 不应再用 for 回圈 自行控制转向。
2. 此程序的 map 有点奇怪, x 用途为何? 若非相关, 应将此三行移至其他函数内
以上, 共同讨论之
Servo 程式库 参考 http://www.game7777.net/doku.php?id=arduino:libraries:servo
另外补充一点
电机类的装置使用电流较大
最好是另外供电 学长 发表于 2013-5-21 22:25 static/image/common/back.gif
另外补充一点
电机类的装置使用电流较大
我要实现的是在竖直方向一度一度叠加,加到90度 然后水平方向转动一度,如果想你的例程 只是0度 180度变换那么肯定得加延时,才能让它完全到位 再继续转的。那么对于我的舵机来说 for不宜用?那用while? 罹凝寒冰 发表于 2013-5-22 10:31 static/image/common/back.gif
我要实现的是在竖直方向一度一度叠加,加到90度 然后水平方向转动一度,如果想你的例程 只是0度 180度变换 ...
其实,你要的操作已经符合特殊需要了,
所以用 for 控制也没什麽不可以...
但如你所说的90度後加1度.. 不如 直接转到 90 度然後,再加1 。
一度一度转, 也要时间, 不如一次转到位。
另外, for 也行 while 也行, 高兴怎麽控制就怎麽控制... 呵呵 学长 发表于 2013-5-22 12:16 static/image/common/back.gif
其实,你要的操作已经符合特殊需要了,
所以用 for 控制也没什麽不可以...
但如你所说的90度後加1度.. 不 ...
一次转到位就不让它循环了 直接赋值就好 因为我要再每个角度采集数据 所以不能一次从0转到90度的 学长 发表于 2013-5-21 22:22 static/image/common/back.gif
先贴图跟代码 再解释
不好意思,x其实是i的。我现在改回来 学长 发表于 2013-5-21 22:22 static/image/common/back.gif
先贴图跟代码 再解释
请问您提出的第一个问题是什么意思?本人愚钝,望指教。 chylove 发表于 2013-5-22 18:54 static/image/common/back.gif
请问您提出的第一个问题是什么意思?本人愚钝,望指教。
没什麽特别的意思, 就是字面上的含义
既然有用, 就1度1度的转, 用 for 或是用 while 都可以。
呵呵 chylove 发表于 2013-5-22 18:40 static/image/common/back.gif
不好意思,x其实是i的。我现在改回来
那你的 map 用法, 是不是错了?
把 0-180 映射为 50-60 ? 学长 发表于 2013-5-22 20:11 static/image/common/back.gif
那你的 map 用法, 是不是错了?
把 0-180 映射为 50-60 ?
没错呀,i是从0-180,舵机转动的角度就从50-60.这样的话,多个舵机就可以同时运动并同时到达各自预设角度。 chylove 发表于 2013-5-23 00:54 static/image/common/back.gif
没错呀,i是从0-180,舵机转动的角度就从50-60.这样的话,多个舵机就可以同时运动并同时到达各自预设角度 ...
嗯.. 没错就好.. 只是很难理解
页:
[1]
2