按鈕:如何在Arduino中使用此簡單元素

鈕扣

Un 按鈕是允許您中斷或發送電子信號的按鈕。 通過將此簡單元素與其他元素組合,您可以為多種應用程序創建項目。 在Arduino項目中,這種按鈕的使用非常普遍。 通過組合這些按鈕中的幾個按鈕,您可以創建稍微複雜一些的鍵盤,儘管已經有用於這些用途的可編程鍵盤...

順便說一句 您不應將按鈕與開關混淆。 他們是完全不同的東西。 所不同的是,每次按下該開關,便會激活或停用該一個或多個開關。 而按鈕將僅在施加壓力的狀態下停留在一種狀態。 我評論說它可以發送或中斷,這是因為按鈕有兩種基本類型。

按鈕符號

常開按鈕或常開按鈕,常閉按鈕或常閉按鈕。 繼電器也會向您發出聲音。 是的,它是完全相同的操作。 當您擁有一個NC時,它將使電流流過其端子,並且僅在您按下它時才會中斷。 另一方面,當不施加壓力時,NA不會讓電流通過,而僅在您按下時才讓電流通過。

知道, 幾乎是您需要了解的所有關於按鈕的信息 使用Arduino開始連接和編程。 事實是,這是一個非常簡單的元素,因此關於這種類型的按鈕沒有太多要說的了。

與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; //變量返回其原始值
}

簡單的項目示例

帶按鈕和Arduino的防彈跳

一旦我們了解了連接按鈕和防反彈電路的方法的主題,我們將看到一個實際的例子來 通過按鈕控制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);

}


5條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   Marcelo Castillo佔位符圖像 他說:

    涼爽的!!! 非常感謝您,我一直在構建CNC控制器,但自相矛盾的是按鈕是我最難調整的。

  2.   莉莉安娜 他說:

    你好! 我是新手,請諮詢GND…..黑線是否不應該從負極線伸出,負極線位於圖2所示的上方?

  3.   約翰 他說:

    很好的解釋..幾年前,我做了一個汽車點火項目,事實是我永遠都做不了正確的擊鍵。對於點火..我將嘗試這種方法。非常感謝您的大力幫助

  4.   奧馬爾·羅梅羅·林孔 他說:

    您好,我正在按照以下順序執行一個帶有三個按鈕和 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。

    1.    艾薩克 他說:

      你好奧馬爾,
      我建議您查看我們的 Arduino 教程:
      https://www.hwlibre.com/programacion-en-arduino/
      你也可以看看我們關於millis()的文章:
      https://www.hwlibre.com/millis-arduino/
      問候。