2017-08-22 67 views
0

我在Arduino One中使用attachInterrupt()函數來識別執行器的極限。通常我測試它爲if(),但執行器週期非常快,識別變得複雜。因此我選擇使用attachInterrupt(),但我不知道在中斷情況下,我必須在輸入端使用下拉電阻。有人可以告訴我這是否需要?需要下拉電阻?

目前,該系統如下圖所示:

enter image description here

的一段代碼:

attachInterrupt(digitalPinToInterrupt(interruptPin2), EndCourse2, FALLING); 
attachInterrupt(digitalPinToInterrupt(interruptPin3), EndCourse3, FALLING); 

void EndCourse2() { 
    digitalWrite(12,LOW); 
    btnpressed2=0; 
} 

void EndCourse3() { 
    if(btnpressed2==0) { 
    digitalWrite(12,HIGH); 
    CounterAT2++; 
    } 
    btnpressed2=1; 
} 
+0

儘管我的答案是,我認爲這個問題更適合在[electronics.stackexchange.com](https://electronics.stackexchange.com/) – sauerburger

+0

上拉設計總是比下拉更好。在這種特定情況下,由於MCU提供內部上拉電阻,因此可爲您節省一個電阻。 –

+5

我投票結束這個問題作爲題外話題,因爲它是關於電子而不是編程。請改爲在https://electronics.stackexchange.com/上發佈此類問題。 – Lundin

回答

2

你需要一個下拉電阻在這種情況下。

Arduino的數字輸入具有高阻抗,可以通過絕緣輸入。如果你省略電阻並考慮開關打開的情況,Arduino的輸入是浮動。這意味着數字輸入未連接到任何電位。電磁干擾會在您的電路中感應出電流。基本上,由於這種干擾,輸入端的電壓可能會從低變到高。

要定義輸入的狀態,當開關打開時,應該添加電阻,以確保輸入處於低電平,與電磁干擾無關。

如果您鏡像電路,使得開關接地並且電阻連接到Vcc,您可以通過將輸入模式設置爲INPUT_PULLUP將上拉電阻移入Arduoin。此後使用內部電阻器,可以將電阻器放在外面。

+0

謝謝,我保持我的電阻拉下來,我改變了attachInterrupt()參數,在我使用FALLING之前,但它是不正確的,所以我切換到低,因爲我的輸入總是接收高,我想識別何時低。 –

+0

您還應該查看[反彈](https://en.wikipedia.org/wiki/Switch#Contact_bounce)。 – sauerburger

+0

...並且不使用中斷使所有事情(包括去抖)變得更容易。 – datafiddler