Un 按鈕是允許您中斷或發送電子信號的按鈕。 通過將此簡單元素與其他元素組合,您可以為多種應用程序創建項目。 在Arduino項目中,這種按鈕的使用非常普遍。 通過組合這些按鈕中的幾個按鈕,您可以創建稍微複雜一些的鍵盤,儘管已經有用於這些用途的可編程鍵盤...
順便說一句 您不應將按鈕與開關混淆。 他們是完全不同的東西。 所不同的是,每次按下該開關,便會激活或停用該一個或多個開關。 而按鈕將僅在施加壓力的狀態下停留在一種狀態。 我評論說它可以發送或中斷,這是因為按鈕有兩種基本類型。
有 常開按鈕或常開按鈕,常閉按鈕或常閉按鈕。 繼電器也會向您發出聲音。 是的,它是完全相同的操作。 當您擁有一個NC時,它將使電流流過其端子,並且僅在您按下它時才會中斷。 另一方面,當不施加壓力時,NA不會讓電流通過,而僅在您按下時才讓電流通過。
知道, 幾乎是您需要了解的所有關於按鈕的信息 使用Arduino開始連接和編程。 事實是,這是一個非常簡單的元素,因此關於這種類型的按鈕沒有太多要說的了。
與Arduino的按鈕集成
La 連接按鈕 使它與Arduino交互再簡單不過了。 您可以在這些線上看到的圖就是一個例子。 那就是開始實驗的全部。 但是,當然,使用該方案您將無能為力。 您可能需要發揮一點想像力來決定該按鈕將要控制什麼。 實際上,如果您經常閱讀hwlibre.es,您將已經看到一些文章,其中我們使用了按鈕...
連接方式
您應該知道的一件事是防彈跳問題 如何連接這些按鈕。 首先,我們將介紹它們的連接方式,您已經知道可以使用上拉和下拉電阻器進行連接:
- 拉起-使用此電阻器配置,當按下按鈕時,微控制器或Arduino可以看到或讀取該引腳上的零。 即,將其解釋為LOW信號。
- 拉下:在這種情況下,情況恰恰相反,您可以通過連接的引腳讀取或接收1或HIGH信號。
請勿將其與NC或NA混淆, 這與我們之前看到的有所不同。 這是獨立於其他...
防彈跳
按鈕有一個 彈跳效果 當按下。 也就是說,當按下或釋放它時,通過其觸點的信號會有波動,可能導致信號從HIGT狀態變為LOW(反之亦然),而實際上並不想發生這種情況。 這會在Arduino上產生不良影響並使它做奇怪的事情,例如當我們真的想通過按鈕將其關閉時激活一個元素等。 那是因為Arduino將跳動解釋為好像被按下了不止一次...
那負面影響 它有一個解決方案。 為此,無論使用了上拉還是下拉配置,或者是NC或NO,都必須在防彈跳電路(硬件方法)或軟件(修改源代碼)中實現一個小電容器。 在所有這些情況下,必須執行解決方案以避免這些反彈。
例如,上拉和下拉電路具有 防反彈電容器 他們看起來像這樣:
雖然 軟件方法 在以下代碼片段中可以看到:
if(digitalRead(button)== LOW)//檢查是否按下了按鈕
{
按下= 1; //變量更改值
}
如果(digitalRead(按鈕)==高&&按下== 1)
{
//執行所需的動作
按下= 0; //變量返回其原始值
}
簡單的項目示例
一旦我們了解了連接按鈕和防反彈電路的方法的主題,我們將看到一個實際的例子來 通過按鈕控制LED。 如您所見,該方案同樣簡單。
一旦正確連接,下一步就是寫 Arduino IDE中的代碼 對面板進行編程並開始嘗試按鈕。 下面是控制電路的簡單代碼示例:
//控制按鈕的草圖示例
int引腳= 2;
int狀態
脈動int = 0;
無效設置()
{
pinMode(2,輸入); //通過輸入該引腳來讀取脈衝
pinMode(13,OUTPUT); //對於LED
Serial.begin(9600);
}
無效循環()
{
如果(digitalRead(2)== HIGH)
{
銷= 2;
antiBounce(); //調用防反彈功能
}
}
//軟件防彈跳功能
無效的反跳動()
{
while(digitalRead(pin)== LOW);
狀態= digitalRead(13);
digitalWrite(13 ,! state);
while(digitalRead(pin)== HIGH);
}
涼爽的!!! 非常感謝您,我一直在構建CNC控制器,但自相矛盾的是按鈕是我最難調整的。
你好! 我是新手,請諮詢GND…..黑線是否不應該從負極線伸出,負極線位於圖2所示的上方?
很好的解釋..幾年前,我做了一個汽車點火項目,事實是我永遠都做不了正確的擊鍵。對於點火..我將嘗試這種方法。非常感謝您的大力幫助
您好,我正在按照以下順序執行一個帶有三個按鈕和 5 個 LED 的項目。
1 個按鈕向 2 個 LED 發送信號,我稱之為 1 和 2。
第二個按鈕向 3 個 LED 發送信號,稱為 2,3 和 4。
我的第三個按鈕向另外 3 個 LED 發送信號,稱為 3,4、5 和 XNUMX。
我已經設法做到了這個順序,我只有一個問題,當按下 2 個按鈕時,它會向 LED 發送一個錯誤信號,該信號應該保持點亮狀態,導致它間歇性閃爍,我通過延遲(2 秒,這是我需要的,以便 LED 保持亮起然後關閉。然後我的問題是如何將毫秒函數放入我的程序中,我不明白毫秒是如何工作的,我想知道您是否可以幫助我在每個按鈕中使用millis為3個按鈕做一個例子,我需要millis能夠隨時按下按鈕而不會延遲arduino。
你好奧馬爾,
我建議您查看我們的 Arduino 教程:
https://www.hwlibre.com/programacion-en-arduino/
你也可以看看我們關於millis()的文章:
https://www.hwlibre.com/millis-arduino/
問候。