2014-07-21 60 views
0

我正在嘗試爲Arduino Uno編寫一個簡單的控制程序,用於在工作中運行的實驗。非常簡單,只需要讀取輸入引腳是否爲高電平,如果等待10毫秒以將輸出引腳變爲高電平,保持10毫秒然後變爲低電平,否則輸出引腳爲低電平。Arduino循環錯誤:等待幾秒鐘以響應輸入變化

我的問題是,當我運行它時,它會忽略最初的延遲,並且輸出引腳在低電平前保持高電平幾秒。 (使用delayMicroseconds)

void setup() 
{ 
pinMode(8, INPUT); 
pinMode(13, OUTPUT); 
} 

void loop() 
{ 
    if (digitalRead(8) == HIGH) 
    { 
    delayMicroseconds(10000); //wait 10 milliseconds 
    digitalWrite(13, HIGH); // Pump on 
    delayMicroseconds(10000); // holds for pulse width of 10 millisecond 
    digitalWrite(13, LOW); // Pump off 
    } 
    else 
    { 
    } 
} 

我已經嘗試建立一些簡單的使用延時功能,等待一秒鐘,然後打開輸出引腳爲高電平,等待秒鐘,然後將腳輸出低電平調試。我這樣做是爲了使用Arduino內置的LED進行可視化調試。結果是它在輸入引腳變爲低電平後實際上繼續運行循環3次。 (使用延遲)

void setup() 
{ 
pinMode(8, INPUT); 
pinMode(13, OUTPUT); 
} 

void loop() 
{ 
    if (digitalRead(8) == HIGH) 
    { 
    delay(1000); //wait 1 second 
    digitalWrite(13, HIGH); // Pump on 
    delay(1000);     // hold for 1 second 
    digitalWrite(13, LOW); // Pump off 
    } 
    else 
    { 
    } 
} 

我似乎無法弄清楚它爲什麼這樣做。我已經找遍了,似乎無法找到有關爲什麼會發生這種情況的信息。我可能會錯過一些非常簡單的東西,我不是一個有經驗的編碼員,我只是寫我需要運行實驗的東西。我試着用c代碼直接讀寫引腳寄存器,並且從if語句切換到while循環,但他們都沒有解決問題。任何見解都非常感謝。

+1

原理圖在哪裏? –

+0

您可以通過USB端口將電路板連接到PC以使用「串行」接口進行調試嗎?另外:你是否試圖在'setup()'中將引腳13初始設置爲'LOW'? –

+0

由於連接的LED /電阻,引腳13的行爲也有所不同。我會建議嘗試另一個引腳。還使用(或打開)上拉電阻。在setup()中將引腳設置爲LOW。 –

回答

1

你應該看看Arduino上的內部上拉電阻。您可以完全用軟件消除按鈕上的信號:

void setup() { 
    pinMode(2, INPUT_PULLUP); 
} 

void loop() { 
    if (digitalRead(2) == LOW) // NOTE THAT PULLUPS REVERSE YOUR LOGIC 
    { 
    delay(1000); //wait 1 second 
    digitalWrite(13, HIGH); 
    delay(1000);     
    digitalWrite(13, LOW); 
    } 
}