2013-02-26 347 views
0

我有一個使用Arduino IDE 1.5.2在Arduino Due上切換輸出引腳狀態的簡單任務。 我試過這樣的代碼:無法在Arduino上獲得當前輸出引腳狀態

int pinnum = 13; 
void setup() { 
    pinMode(pinnum, OUTPUT); // use on-board LED 
} 

void loop() { 
    digitalWrite(pinnum, !digitalRead(pinnum)); 
    delay(1000); // wait around for 1 sec (1000 ms) 
} 

這什麼都不做。引腳13始終保持高電平。我究竟做錯了什麼?

+0

嗨我刪除了我的答案,因爲它沒有幫助! http://stackoverflow.com/questions/6160963/how-can-i-digitalread-a-pin-that-is-in-pinmode-output我認爲你應該能夠從這個網址得到一些東西壽, – 2013-02-27 22:22:59

回答

4

讀取引腳狀態設置爲OUTPUT時存在一個錯誤。作爲臨時解決辦法,設置引腳爲輸入在某一時刻將其設置爲輸出,如果你的電路允許,像這樣前:

int pinnum = 13; 
void setup() { 
    pinMode(pinnum, INPUT); // Work around bug 
    pinMode(pinnum, OUTPUT); // use on-board LED 
} 

void loop() { 
    digitalWrite(pinnum, !digitalRead(pinnum)); 
    delay(1000); // wait around for 1 sec (1000 ms) 
} 

有關詳細信息,請參閱我的文章在http://forum.arduino.cc/index.php?topic=185291.0

編輯:對不起,我以前的可怕的答案。

0

我認爲你的問題是,你不能讀取你以前發送到引腳13的數字值。你總是讀一個低電平,因爲一個LED接地。

解決方案:將發送到引腳13的邏輯電平的副本存儲在變量中。 這個變量我在下面的代碼中命名爲mem。你不需要閱讀13號針 ,因爲現在你有一個mem副本。這個副本在發送到13號針 之前,與您在代碼示例中所做的一樣。

在對端口引腳執行讀 - 修改 - 寫操作時,通常將您的問題描述爲警告—請參考從微控制器製造商處獲取的數據表。

int pinnum = 13; 
int mem = 0; 
void setup() { 
    pinMode(pinnum, OUTPUT); // use on-board LED 
} 

void loop() { 
    digitalWrite(pinnum, mem); 
    mem=!mem; 
    delay(1000); // wait around for 1 sec (1000 ms) 
}