0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Arduino基礎:讀取開關(guān)狀態(tài)

劉英 ? 來源:Oo一笑 ? 作者:Oo一笑 ? 2023-02-20 09:47 ? 次閱讀

這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。

本文最初發(fā)布在deviceplus.jp.網(wǎng)站上,而后被翻譯成英語。

前言

在本文中,您可以了解如何在您的Arduino項目中使用輕觸開關(guān)以及其實際工作原理。

我們已經(jīng)利用數(shù)字輸出使數(shù)字輸出引腳在HIGH (5V) 和LOW (0V) 兩種狀態(tài)之間切換,從而實現(xiàn)了對LED電機的控制。
另外,您還可以使用數(shù)字輸出來確認電子部件的狀態(tài)。數(shù)字輸出引腳還可以切換為數(shù)字輸入引腳。通過這樣切換,可以確認引腳上的電壓,并通過“LOW”和“HIGH”兩種狀態(tài)輸入。這些輸入值可用于控制其他電子部件。比如您可能希望在數(shù)字輸入為HIGH時使電機運轉(zhuǎn),在輸入為LOW時使電機停止。

poYBAGPy0GSAJ66NAAHIKLKLijs466.png

實際上,利用開關(guān)等電子器件,可以使數(shù)字輸入引腳的狀態(tài)切換為0V或5V。
在本文中,我們將介紹如何使用開關(guān)實現(xiàn)數(shù)字輸入。

Arduino的數(shù)字輸入

使用Arduino Uno,您可以將最初用于數(shù)字輸出的引腳D0到D13作為數(shù)字輸入引腳使用??梢酝ㄟ^程序切換為數(shù)字輸入模式,來確認引腳狀態(tài)。

0V輸入為“LOW”,5V輸入為“HIGH”。在程序中,LOW會被讀取為“0”,HIGH會被讀取為“1”。通過確認這些輸入值并執(zhí)行條件分支等處理,即可控制工作狀態(tài)。

pYYBAGPy0GyAUt4nAAOcGY0Dd38603.png

下面我們來實際嘗試一下用Arduino進行數(shù)字輸入。在這里,我們使用跳線連接引腳5,并確認連接到5V電源和GND時的變化。創(chuàng)建以下程序并將其發(fā)送給Arduino:

在第4行中,通過pinMode()指定“INPUT”,以將本次使用的引腳7切換為輸入模式。現(xiàn)在,您可以通過程序確認引腳狀態(tài)了。

獲取第11行由digitalRead()指定的引腳的狀態(tài),并將其存儲在value變量中。如果是0V,則存儲為“0”,如果是5V,則存儲為“1”。

當您想確認獲取的狀態(tài)時,請使用“串行監(jiān)視器”。對于Arduino而言,您可以使用用來從電腦傳輸程序的USB數(shù)據(jù)線將數(shù)據(jù)從Arduino發(fā)送到電腦。使用串行通信可以收發(fā)數(shù)據(jù)。您可以使用串行通信將通過數(shù)字輸入獲取的狀態(tài)發(fā)送到電腦進行確認。

如果您想在程序中使用串行通信,請通過第5行的Serial.begin()進行初始化。此時需要指定通信速度。然后,通過第12行的Serial.println()指定一個值,即可將數(shù)據(jù)發(fā)送到電腦。在本文中,我們使之發(fā)送存儲著數(shù)字輸入狀態(tài)的value變量的內(nèi)容。

要確認Arduino通過串行通信發(fā)送過來的數(shù)據(jù)時,請使用Arduino IDE中內(nèi)置的“串行監(jiān)視器”。要使用串口監(jiān)視器,請單擊Arduino IDE右上角的“串口監(jiān)視器圖標”(放大鏡圖標),即可顯示串行監(jiān)視器畫面。將右下角的通信速度設置為與程序的Serial.begin()中指定的通信速度(本文為9600)相同的值。然后,屏幕上將會顯示0或1。

pYYBAGPy0G6AfKF1AAClSjZ9c6k040.png

接下來,將跳線插入引腳7。將另一端連接到 GND,串行監(jiān)視器上顯示“0”。也就是說,如果數(shù)字引腳為0V,您可以看到“0”(LOW)。同樣,當引腳7與5V電源連接時,您可以看到顯示內(nèi)容變?yōu)椤?”(HIGH)。

pYYBAGPy0HGAZAjsAADbsHJ8gnw176.png

現(xiàn)在我們已經(jīng)確認,輸入會根據(jù)引腳的狀態(tài)發(fā)生變化。

使用輕觸開關(guān)切換輸入

下面,我們嘗試用一個開關(guān)使數(shù)字輸入引腳在HIGH和LOW狀態(tài)之間切換。在本文中,我們使用的是按鈕型“輕觸開關(guān)”。

poYBAGPy0HSAU2jgAAEsHrpKtTI129.png

對于輕觸開關(guān)而言,當按下上方按鈕時,內(nèi)部電路接通,進入通電狀態(tài)。當松開按鈕時,電路斷開,沒有電流流過。通常,在開關(guān)的四個角會配有引腳。如上圖所示配置時,左右引腳之間的間隙起到開關(guān)的作用。右側(cè)的上下引腳和左側(cè)的上下引腳是始終連接的。
如果將輕觸開關(guān)的一個引腳與數(shù)字引腳相連接,另一引腳連接到GND,則按下開關(guān)時內(nèi)部電路會接通,引腳將直連GND。通過這樣做,您可以判斷只要按下開關(guān),數(shù)字輸入就會變?yōu)椤癏IGH”。

poYBAGPy0HiAB0s9AAFtPW_4cKU450.png

但是,當沒有按下開關(guān)時,數(shù)字引腳將會處于沒有任何連接的狀態(tài)。在這種狀態(tài)下,施加在引腳上的電壓會變得不穩(wěn)定。在不穩(wěn)定狀態(tài)下,當用手觸碰引腳或有電池等靠近時,輸入可能會發(fā)生變化。
因此,我們在使用開關(guān)時會連接一種稱為“上拉電路”或“下拉電路”的電路。這種方法是借助電阻器將數(shù)字引腳連接到電源或GND,可以起到穩(wěn)定輸入狀態(tài)的作用。該電路連接到電源端時稱為“上拉電路”,連接到GND端時稱為“下拉電路”。在本文中將以上拉電路為例進行說明,但下拉電路的原理也是一樣的。

pYYBAGPy0HyAHjInAAFcgwOTAdg268.png

使用上拉電路時,在未按下開關(guān)的狀態(tài)下,開關(guān)通過一個電阻器連接到電源。這樣,就與數(shù)字引腳連接電源時的狀態(tài)相同,輸入會穩(wěn)定在5V(HIGH)。當按下開關(guān)后,數(shù)字引腳處于直接連接GND的狀態(tài),因此輸入切換為0V(LOW)。
雖然處于電源與GND連接的狀態(tài),但它們之間夾著一個電阻器(通常為10kΩ左右),因此只會流過少量電流,不存在短路風險。

使用輕觸開關(guān)輸入數(shù)據(jù)

現(xiàn)在,讓我們使用輕觸開關(guān)實際輸入數(shù)據(jù)看看。需要準備好以下電子元器件

? 輕觸開關(guān)
poYBAGPy0ICAOLQ_AAEZoxHeJxk147.png
輕觸開關(guān)有很多種顏色可供選擇。您可以選擇任何您喜歡的顏色。

? 10kΩ (1/4W)電阻器
pYYBAGPy0IiAE2bRAAMtfV4tpIE003.png
用于上拉電路的電阻器。在10kΩ電阻器上印有“棕黑橙金”顏色代碼。

準備好所需組件后,如下圖所示連接它們。將輕觸開關(guān)跨越面包板中心的凹槽插入。

poYBAGPy0I6AUeGpAALMtIbZ8_s911.png

接下來,將前述的程序發(fā)送給Arduino,以通過串行監(jiān)視器確認數(shù)字引腳7的輸入。可以看到,在未按下開關(guān)的狀態(tài)下,顯示“1”(HIGH),在按下開關(guān)時變?yōu)椤?”(LOW)。

使用Arduino上拉功能

在Arduino Uno中,數(shù)字引腳內(nèi)置有“上拉”功能,可以通過程序激活該功能。如果使用內(nèi)部的上拉功能,就不再需要外接電阻器了。您只需連接開關(guān)即可,省時省力。

pYYBAGPy0JOAJnnXAAKZuLeyCVo946.png

激活上拉功能的程序如下:

您只需在第4行的數(shù)字引腳模式設置中指定“INPUT_PULLUP”即可。這樣就能激活內(nèi)置的上拉功能,從而能夠在未按下按鈕的狀態(tài)下穩(wěn)定HIGH輸入。請注意,Arduino Uno中未內(nèi)置下拉功能。

按下開關(guān)時點亮LED

開關(guān)的輸入還可用來控制其他電子元器件。在這里,讓我們利用Arduino中安裝的LED(引腳13),嘗試實現(xiàn)在按下開關(guān)時點亮LED,并在松開開關(guān)時熄滅LED。所用的電路與前述的僅將開關(guān)連接到數(shù)字引腳時的電路相同。編寫程序如下:

確認第14行的數(shù)字輸入值是否為“1”。在Arduino程序中,您也可以將“1”寫為“HIGH”,將“0”寫為“LOW”。為了便于理解,我們在這里使用“HIGH”和“LOW”。

如果輸入為HIGH(未按下按鈕),則執(zhí)行第15行,使引腳13切換到LOW,LED熄滅。如果輸入不是HIGH(按下按鈕),則執(zhí)行第17行,使引腳13切換到HIGH,LED點亮。將程序發(fā)送到Arduino并按下輕觸開關(guān),即可確認LED點亮。

我們成功了!現(xiàn)在,您可以在您的Arduino項目中使用開關(guān)來執(zhí)行輸入了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    23073

    瀏覽量

    657082
  • 開關(guān)狀態(tài)
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    9146
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6458

    瀏覽量

    186504
  • 輕觸開關(guān)
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    1312
收藏 人收藏

    評論

    相關(guān)推薦

    請問撥碼開關(guān)需要加上拉電阻嗎?

    撥碼開關(guān)需要加上拉電阻嗎?不加可以讀取開關(guān)狀態(tài)嗎?
    發(fā)表于 09-11 21:17

    如何將開關(guān)的開/斷狀態(tài)轉(zhuǎn)變成Arduino能夠讀取的高/低電平

    如何將開關(guān)的開/斷狀態(tài)轉(zhuǎn)變成Arduino能夠讀取的高/低電平。解決的辦法是通過上 /下拉電阻,按照電路的不同通常又可以分為正邏輯(Positive Logic)和負邏輯(Invert
    發(fā)表于 01-17 08:35

    使用Arduino讀取MPU6050數(shù)據(jù)的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用Arduino讀取MPU6050數(shù)據(jù)的程序免費下載。
    發(fā)表于 07-24 17:17 ?27次下載
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>讀取</b>MPU6050數(shù)據(jù)的程序免費下載

    基于Modbus RTU協(xié)議的開關(guān)量控制采集的簡單介紹

    一、什么是開關(guān)量控制采集 所謂的開關(guān)量控制采集就是通過458/232接口發(fā)送控制命令,實現(xiàn)讀取開關(guān)量輸入或者控制開關(guān)量輸出的通斷。 二、開關(guān)
    發(fā)表于 01-22 10:51 ?2824次閱讀
    基于Modbus RTU協(xié)議的<b class='flag-5'>開關(guān)</b>量控制采集的簡單介紹

    Arduino讀取MPU9250傳感器

    電子發(fā)燒友網(wǎng)站提供《用Arduino讀取MPU9250傳感器.zip》資料免費下載
    發(fā)表于 10-19 09:15 ?4次下載
    用<b class='flag-5'>Arduino</b><b class='flag-5'>讀取</b>MPU9250傳感器

    讀取負張力的Arduino示波器的想法

    電子發(fā)燒友網(wǎng)站提供《讀取負張力的Arduino示波器的想法.zip》資料免費下載
    發(fā)表于 10-31 15:10 ?0次下載
    <b class='flag-5'>讀取</b>負張力的<b class='flag-5'>Arduino</b>示波器的想法

    Arduino讀取DHT22(或DHT11)

    電子發(fā)燒友網(wǎng)站提供《用Arduino讀取DHT22(或DHT11).zip》資料免費下載
    發(fā)表于 11-16 11:02 ?1次下載
    用<b class='flag-5'>Arduino</b><b class='flag-5'>讀取</b>DHT22(或DHT11)

    Arduino HDC2010讀取數(shù)據(jù)和舒適區(qū)警報

    電子發(fā)燒友網(wǎng)站提供《Arduino HDC2010讀取數(shù)據(jù)和舒適區(qū)警報.zip》資料免費下載
    發(fā)表于 12-09 09:35 ?2次下載
    <b class='flag-5'>Arduino</b> HDC2010<b class='flag-5'>讀取</b>數(shù)據(jù)和舒適區(qū)警報

    PROFINET IO 設備讀取模塊的狀態(tài)信息

    “ModuleStates”指令可用來讀取 PROFINET IO 設備或 PROFIBUS DP 從站的模塊狀態(tài)信息。
    的頭像 發(fā)表于 05-19 14:19 ?3533次閱讀
    PROFINET IO 設備<b class='flag-5'>讀取</b>模塊的<b class='flag-5'>狀態(tài)</b>信息

    如何通過Arduino讀取電表

    電子發(fā)燒友網(wǎng)站提供《如何通過Arduino讀取電表.zip》資料免費下載
    發(fā)表于 06-16 15:18 ?1次下載
    如何通過<b class='flag-5'>Arduino</b><b class='flag-5'>讀取</b>電表

    Arduino的現(xiàn)代RTOS和狀態(tài)機開源分享

    電子發(fā)燒友網(wǎng)站提供《Arduino的現(xiàn)代RTOS和狀態(tài)機開源分享.zip》資料免費下載
    發(fā)表于 06-27 14:57 ?0次下載
    <b class='flag-5'>Arduino</b>的現(xiàn)代RTOS和<b class='flag-5'>狀態(tài)</b>機開源分享

    用GPIO讀取按鈕狀態(tài)

    樹莓派的GPIO可以控制發(fā)光二極管,這是GPIO的Output(輸出)能力,它也具有input(讀取)的能力,所以才能叫做I/O(輸入/輸出)端口。今天我們就來用GPIO的引腳來讀取按鈕的狀態(tài)
    的頭像 發(fā)表于 07-02 15:06 ?1564次閱讀
    用GPIO<b class='flag-5'>讀取</b>按鈕<b class='flag-5'>狀態(tài)</b>

    Arduino之如何逐行讀取SD卡文本文件

    電子發(fā)燒友網(wǎng)站提供《Arduino之如何逐行讀取SD卡文本文件.zip》資料免費下載
    發(fā)表于 07-12 10:17 ?1次下載
    <b class='flag-5'>Arduino</b>之如何逐行<b class='flag-5'>讀取</b>SD卡文本文件

    通過SFC 51讀取CPU的指示燈狀態(tài)

    可以通過SFC 51讀取CPU的指示燈狀態(tài),使用的SSL_ID參數(shù)為16#74(16#19)讀取全部指示燈狀態(tài) 或者16#174(16#119)讀取
    的頭像 發(fā)表于 07-24 16:34 ?1531次閱讀
    通過SFC 51<b class='flag-5'>讀取</b>CPU的指示燈<b class='flag-5'>狀態(tài)</b>

    stm32讀取boot引腳狀態(tài)

    在STM32微控制器中,Boot引腳(通常指的是BOOT0和BOOT1引腳)的狀態(tài)決定了設備啟動時的引導模式。這些引腳的狀態(tài)在復位時被讀取,并據(jù)此選擇啟動哪塊存儲器。比如,STM32F103系列
    的頭像 發(fā)表于 08-22 09:48 ?964次閱讀