Robofun 機器人論壇

標題: 請教Servo函式庫問題(附程式) [打印本頁]

作者: iamahon    時間: 2012-7-23 22:58
標題: 請教Servo函式庫問題(附程式)
程式如下#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輸出功能嗎,請高手們指點迷津,謝謝
作者: mzw2008    時間: 2012-7-24 10:41
可是 mymotor.attach (4);
是4號
和9.10沒關係
而且畫面中沒用到9啊
作者: iamahon    時間: 2012-7-25 00:10
謝謝答覆,我這只是舉例,似乎只要用到.attach指令後,原pwm功能就回不來了,是否是我不會用.detach指令,所以請有試過的高手們指點指點,謝謝。
作者: iamahon    時間: 2012-7-25 00:33
我再把程式改一下來說明清楚好了,如下:
#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功能,但由上例中我卻試不出來,所以才請有試過的高手們幫幫忙解答小弟的迷惑。
作者: mzw2008    時間: 2012-7-25 20:35
板子都丟在教室裡, 明天來試試
但是否看servo.attached() , 檢查看看是否真的釋放了
作者: vegewell    時間: 2012-7-26 19:37
回復 4# iamahon

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

試試
作者: iamahon    時間: 2012-7-26 21:25
樓上的的大大,好像沒這種用法喔,請問你是怎麼試的。
作者: vegewell    時間: 2012-7-27 12:21
回復 7# iamahon

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

我拿你的程式用我的ARDUINO MEGA板,
試了結果,可以,
led會由暗變亮再由亮變暗(重覆),
所以不是程式有問題,
可能你的連線有問題,   
可以秀一下你的接線圖嗎?
作者: iamahon    時間: 2012-7-29 20:42
非常感謝樓上這位大大的指點,果然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個以上會怎樣都沒說清楚),以上是小弟才疏學淺的查了一下,也藉此給有看到此篇的人,多少有點瞭解,再次感謝樓上大大的指點,謝謝。




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2