本帖最后由 学长 于 2013-5-21 22:27 编辑
先贴图跟代码 再解释
接线实拍
跟代码及代码运行
接下来贴代码- /*问题来源
- *[url]http://www.geek-workshop.com/thread-4655-1-1.html[/url]
- */
- #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
|