2013-05-13 139 views
2

我很確定這裏有一個愚蠢的錯誤,但我恐怕我不能爲我的生活工作了!Arduino伺服沒有響應按鈕按

簡單的測試程序,它會取得錯誤:

#include <Servo.h> 

Servo myservo; 

int testPIN = 13; 
int inputPIN = 5; 

void setup() 
{ 
    myservo.attach(8); 
    pinMode(testPIN, OUTPUT); 
    pinMode(inputPIN, INPUT); 
} 

void loop() 
{ 
    if (digitalRead(inputPIN) == HIGH) 
    { 
    digitalWrite(testPIN, HIGH); 
    myservo.write(90); 
    } 
    else 
    {  
    digitalWrite(testPIN, LOW); 
    myservo.write(0); 
    } 
} 

Arduino的掃例子(http://arduino.cc/en/Tutorial/Sweep)的作品,所以我相當有信心,電子作品。

testPIN也按預期方式打開和關閉,因此if語句按預期工作。

歡迎任何意見/建議!

編輯 - 對不起誤差伺服完全不

EDIT 2移動 - 這是一個有點奇怪的是怎麼回事。如果我將掃描循環複製/粘貼到if子句中,則伺服器按預期作出反應(即,輸入=高電平使得伺服運行一個掃描循環,直到達到預期結束時才掃描循環)。我的直接想法是需要延遲,但無論他們多長時間或在if/else子句中添加它們的位置,它們似乎都沒有區別。

+0

什麼是錯誤? – Mushy 2013-05-13 14:25:44

+0

對不起!往上看。謝謝 – user2056166 2013-05-13 14:27:12

+0

在現場你已經提到伺服器在第9針,在你的代碼中它連接到第8針......只是一個瘋狂的猜測。 – Archie 2013-05-13 14:31:55

回答

0

我不知道你有哪個arduino板,但是在arduino uno上,我很確定引腳8不是PWM輸出。而且您無法在非PWM輸出上運行伺服。

見歐諾板的這個形象,並注意沒有波浪(一個端口支持PWM指示)引腳8:

Arduino Mega2560 board

+0

謝謝,但伺服器與「掃描」程序正常工作,只是爲了確保我只是在第7針上嘗試了它,並更改了代碼,沒有運氣。 – user2056166 2013-05-13 14:50:24

+0

@unwind感謝您的編輯。 – Bastien 2013-05-13 14:52:34

+0

啊,我明白你的意思了 - 我使用的是Arduino Mega2560,在任何引腳上都沒有tildas。 – user2056166 2013-05-13 14:54:13

0

你鏈接到的掃描程序是使用引腳9,這是一個uno上的PWM。您的代碼使用引腳8,而不是PWM輸出。將伺服器切換到第9針,並將代碼中的附件更改爲第9針,假設這是您唯一的問題,那麼您的代碼應該可以工作。

+0

你是什麼意思,你不能控制引腳8上的伺服? – AGS 2013-05-14 11:40:35

+0

這是一些Arduino板的問題,如上所述。 – user2056166 2013-05-14 19:52:39

0

正如評論中所建議的,我剛寫了一個緩慢移動伺服的功能。不是一個優雅的解決方案,但伺服響應時間不是問題,所以它的伎倆。

感謝您的所有幫助和建議,並感謝@ praks411的包裝功能。