Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 6849|回復: 10
打印 上一主題 下一主題

請教Servo函式庫問題(附程式)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-7-23 22:58:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程式如下#include <Servo.h>
Servo mymotor;
void setup ()
{
  mymotor.attach (4);
  mymotor.detach ();
}
void loop ()
{
  int i;
  for (i=0;i<256;i++)
  {
    analogWrite (10,i);
    delay (5);
  }
  for (i=255;i>=0;i--)
  {
    analogWrite (10,i);
    delay (5);
  }
  delay (3000);
}


這原本是一道使接在D10的LED慢慢變亮再慢慢變暗的程式,
結果加了
  mymotor.attach (4);
  mymotor.detach ();

這二行後就不聽使換了,
不是說只要有.detach ()後,D9及D10就可以恢復原有的
PWM輸出功能嗎,請高手們指點迷津,謝謝
2#
發表於 2012-7-24 10:41:34 | 只看該作者
可是 mymotor.attach (4);
是4號
和9.10沒關係
而且畫面中沒用到9啊
3#
 樓主| 發表於 2012-7-25 00:10:31 | 只看該作者
謝謝答覆,我這只是舉例,似乎只要用到.attach指令後,原pwm功能就回不來了,是否是我不會用.detach指令,所以請有試過的高手們指點指點,謝謝。
4#
 樓主| 發表於 2012-7-25 00:33:08 | 只看該作者
我再把程式改一下來說明清楚好了,如下:
#include <Servo.h>
Servo mymotor;
void setup ()
{
  mymotor.attach (4);
  mymotor.write (90);
  delay (3000);
  mymotor.detach ();

}
void loop ()
{
  int i;
  for (i=0;i<256;i++)
  {
    analogWrite (9,i);
    delay (5);
  }
  for (i=255;i>=0;i--)
  {
    analogWrite (9,i);
    delay (5);
  }

}

如果沒有藍色這四行的話,D9上的led會由暗變亮再由亮變暗(重覆),可是多了這四行就不聽使喚了(而接在D4上的舵機依然可以轉90度),在http://arduino.cc/en/Reference/ServoDetach這裡有說到
Description
Detach the Servo variable from its pin. If all Servo variables are detached, then pins 9 and 10 can be used for PWM output with analogWrite().
當使用了.detach指令後可以恢復原D9及D10的PWM功能,但由上例中我卻試不出來,所以才請有試過的高手們幫幫忙解答小弟的迷惑。
5#
發表於 2012-7-25 20:35:47 | 只看該作者
板子都丟在教室裡, 明天來試試
但是否看servo.attached() , 檢查看看是否真的釋放了
6#
發表於 2012-7-26 19:37:53 | 只看該作者
回復 4# iamahon

mymotor.detach ();
改成
mymotor.detach (4);

試試
7#
 樓主| 發表於 2012-7-26 21:25:52 | 只看該作者
樓上的的大大,好像沒這種用法喔,請問你是怎麼試的。
8#
發表於 2012-7-27 12:21:01 | 只看該作者
回復 7# iamahon

有這種用法,如下,
http://wiki.pinguino.cc/index.php/Servo.detach
9#
 樓主| 發表於 2012-7-28 00:54:11 | 只看該作者
感謝樓上大大,可是我在arduino uno上試不出來呢,請問 pinguino 和 arduino 有相通嗎,pinguino 是用microchip pic32 的 ic,而arduino 是用 atmel mega 168/328 之類的 ic,猜想文法上應該有些許差異吧,所以我應該怎麼做才對呢,再請先知們指點。
10#
發表於 2012-7-28 12:45:34 | 只看該作者
回復 9# iamahon

我拿你的程式用我的ARDUINO MEGA板,
試了結果,可以,
led會由暗變亮再由亮變暗(重覆),
所以不是程式有問題,
可能你的連線有問題,   
可以秀一下你的接線圖嗎?
11#
 樓主| 發表於 2012-7-29 20:42:56 | 只看該作者
非常感謝樓上這位大大的指點,果然mega板是可以的,小弟用的是mini板和uno板和duemilanove板皆不行,原因是主單晶是 328p,應該是內部資源不足所至,小弟試了下 mega 2560 基板就可以了,後來查了下這裡http://arduino.cc/en/Reference/Servo,原來人家早就有寫大部份的板可支援到12個伺服舵機,而mega板則支援到48個伺服舵機,而且大部份的板使用此伺服功能庫時,將無法使用第9及第10腳的PWM功能,至於mega板,在12個伺服舵機之下,不會影響PWM功能,不過當使用到12以上至23個伺服舵機時則會無法使用第11腳及第12腳的PWM功能(不是說可支援到48個嗎,那23個以上會怎樣都沒說清楚),以上是小弟才疏學淺的查了一下,也藉此給有看到此篇的人,多少有點瞭解,再次感謝樓上大大的指點,謝謝。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-9-21 22:04 , Processed in 0.267601 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表