女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

用GPIO讀取按鈕狀態

CHANBAEK ? 來源:和娃一起玩樹莓派 ? 作者:老孟K ? 2023-07-02 15:06 ? 次閱讀

樹莓派的GPIO可以控制發光二極管,這是GPIO的Output(輸出)能力,它也具有input(讀取)的能力,所以才能叫做I/O(輸入/輸出)端口。今天我們就來用GPIO的引腳來讀取按鈕的狀態。

需要的材料

要完成本次實驗,我們需要如下的元器件

  • 開關按鈕,2腳或四腳都可以。
  • 兩條跳線
  • 面包板(可選,沒有面包板,需要把元器件直接連接,容易出問題)
  • 樹莓派GPIO擴展組件(可選)

開關按鈕

在我們日常生活中,開關按鈕非常常見,每個電器的開關都是一個開關按鈕。今天我們用的按鈕如下圖:

平時按鈕的2個引腳是斷開的,當按鈕按下時,會連通2個引腳。四個引腳的按鈕原理一樣,只是兩邊的引腳是相通的,方便在電路中與其他元器件的連接。開關在電路圖中的符合較多,常見的如下:

圖片

其他元器件上一節講過,這里不再贅述。

所有器件的全家福如下:

圖片

讓我們按下面的電路把元器件連接起來。

圖片

把開關的一端引腳連到GPIO的GND(接地點),另一端連接到GPIO 27引腳。最終連接好后電路實物如下

圖片

電路好了,接下來我們編寫程序來讀取按鈕狀態。

讀取按鈕狀態的Python程序

我們先用gpiozero庫來讀取按鈕狀態,上一講提到過這個類庫對讀取按鈕狀態做了封裝,可以直接使用它的button類。在Thonny中新建一個python程序,代碼如下:

from gpiozero import Button  #引入Button類


button = Button(27)    #按鈕鏈接了GPIO27
button.wait_for_press()   #等待按鈕被按下
print("你按了按鈕")  #輸出語句

運行這個程序,當按鈕被按下時,可以看到在Thonny的輸出窗口打印出來“你按了按鈕”

圖片

這個程序在打印語句后就會退出,如果我們希望程序可以一直讀取按鈕狀態,需要加入while循環。我們修改代碼如下:

from gpiozero import Button  #引入Button類


button = Button(27)    #按鈕鏈接了GPIO27
while True:
    button.wait_for_press()
    print("你按了按鈕")

執行程序,然后按一下按鈕,你發現了什么?是不是和我們預想的不同?是的,你的程序打印了很多的“你按了按鈕”,而不是只有一個。

圖片

為什么會這樣呢?

這是因為計算機的世界里事情發生的非常快,當我們按下按鈕時,程序打印了“你按了按鈕”后會馬上回到while循環的第一句,也就是button.wait_for_press(),這僅需要幾毫秒的時間,此時,我們的按鈕還在被按下的狀態,不需要等待被按下,所以就會馬上執行下面的打印語句,然后繼續下一個循環。雖然我們按了一下很快放開了按鈕,但是按鈕被按下的時間可能有幾百毫秒,而每個循環只需要幾毫秒,循環被執行了多次,我們就看到了很多的”“你按了按鈕”。

那么如何實現我們按一次按鈕,打印一句“你按了按鈕”呢?我們可以加入一個等待語句,打印后稍等一下再進入下一個循環,此時按鈕應該已經彈起了。新程序如下:

from gpiozero import Button
from time import sleep


button = Button(27)
while True:
    button.wait_for_press()
    print("你按了按鈕") 
    sleep(0.3)  #等待300毫秒,然后再進入下一次循環。

執行程序,我們可以看到每次按下,"你按了按鈕"只會打印一次。

圖片

如果我們再按幾次,每次都會打印一句"你按了按鈕",而不是每次打印非常多句了。

使用RPi.GPIO庫來讀取按鈕狀態

剛才我們用gpiozero來讀取按鈕狀態,語句容易理解,編寫程序也容易,如果我們換成RPi.GPIO庫應該怎么寫程序呢?

這就比較復雜了,當把GPIO引腳設置為輸入時,需要定義該引腳連接了上拉電阻還是下拉電阻,這2個概念對于孩子理解起來并不容易,可以簡單理解為上拉電阻是引腳通過電阻連接高電位,下拉電阻是引腳通過電阻連接低電位。在我們的電路中沒有接入電阻,但按原理應該算成是上拉電阻模式。最終的程序如下:

import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)


GPIO.setup(27,GPIO.IN,pull_up_down=GPIO.PUD_UP) #設置GPIO27為上拉電阻模式的輸入


while True:
    in_value = GPIO.input(27)
    if in_value == False:
        print("你按了按鈕")
        sleep(0.3)

執行這個程序,可以得到和前面用gpiozero庫一樣的效果,只是理解起來更難一些而已。

好了,現在我們已經知道如何通過GPIO來讀取外部數據(按鈕狀態),也知道如何控制外部世界(發光二極管),接下來我們將用樹莓派制作一個具有實用價值的東西:紅綠燈。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 發光二極管
    +關注

    關注

    13

    文章

    1213

    瀏覽量

    67253
  • GPIO
    +關注

    關注

    16

    文章

    1270

    瀏覽量

    53550
  • Output
    +關注

    關注

    0

    文章

    31

    瀏覽量

    10690
  • 面包板
    +關注

    關注

    4

    文章

    299

    瀏覽量

    17983
  • 樹莓派
    +關注

    關注

    121

    文章

    1936

    瀏覽量

    106968
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    采用單個ADC端口來讀取多個按鈕狀態的方法

    利用單片機的ADC端口,可以讀取多個按鈕狀態。在設計過程中,需要綜合考慮到按扭的個數與讀取的可靠性,特別是對選擇電阻的阻值進行優化,使得不同分壓數值之間相差最大。
    的頭像 發表于 10-07 15:19 ?4391次閱讀
    采用單個ADC端口來<b class='flag-5'>讀取</b>多個<b class='flag-5'>按鈕</b><b class='flag-5'>狀態</b>的方法

    如何對GPIO IO口的狀態進行讀取

    如何對GPIO IO口的狀態進行讀取呢?有什么方法嗎?
    發表于 01-25 07:16

    可以在讀取SPI時使用GPIO控制嗎?求解

    的是STM32F767II,CubeIDE,HAL驅動。我想在讀取 SPI 時使用 GPIO 控制。我使用 SPI 大師。SPI Master 讀操作在 MOSI 操作之后操作 MISO。
    發表于 12-12 07:42

    ESP8266幾個GPIO引腳的狀態,沒有任何內容可以只讀取狀態的原因?

    對不起,這是一個非常基本的問題,但是編寫代碼是我的弱項。我需要做的就是在網站上顯示來自 ESP8266 的幾個 GPIO 引腳的狀態。我發現有很多教程可以顯示和更改 gpio,但沒有任何內容可以只
    發表于 06-01 14:02

    基于按鈕GPIO切換不起作用如何解決?

    使用 ESP8266 nodemcu 開發板。我已在此鏈接中購買了電路板。 我已經完成了切換 LED 的程序(連接到 GPIO0)。我已將開關連接到 GPIO5。我附上了我的c程序的word文檔。我試著
    發表于 06-12 06:05

    DMA_讀取GPIO電平到內存

    DMA_讀取GPIO電平到內存,單片機程序
    發表于 01-12 18:19 ?11次下載

    樹莓派的gpio有什么_怎么

    ),控制硬件工作(如LED、蜂鳴器等),讀取硬件的工作狀態信號(如中斷信號)等。GPIO口的使用非常廣泛。掌握了GPIO,差不多相當于掌握了操作硬件的能力。
    發表于 12-06 09:05 ?1.6w次閱讀

    樹莓派GPIO入門04-使用按鈕

    我們通過程序控制彩色LED發出不同顏色的光。這次我們3個按鈕來手動控制彩色LED燈分別發出紅,綠,藍光并可以同時按下不同按鈕以顯示混合顏色的光。最終效果樹莓派GPIO
    發表于 04-02 14:42 ?1589次閱讀

    stm32 hal庫tim3觸發dma讀取gpio狀態

    眾所周知,GPIO不屬于外設,屬于內存233最近有個東東需要頻繁對IO口進行讀取,雖然說可以定時器中斷,但是頻繁地進入中斷會影響性能,于是DMA來處理。cube和keil的工程在下
    發表于 11-30 13:21 ?7次下載
    stm32 hal庫tim3觸發dma<b class='flag-5'>讀取</b><b class='flag-5'>gpio</b><b class='flag-5'>狀態</b>

    GPIO的8種工作模式詳細介紹!

    我們在用STM32這顆MCU的時候,的最多的也是最基礎的應該就是GPIO外設了,而在STM32的HAL庫中GPIO有8種工作模式4種輸入狀態,4種輸出
    發表于 11-30 13:36 ?9次下載
    <b class='flag-5'>GPIO</b>的8種工作模式詳細介紹!

    sunplus gpio使用

    RISCGPIO_E_SET(a,d)//設置IO口輸入d=0/輸出模式d=1如果沒有上面的設置,直接使用下面函數是不對的。GPIO_O_SET(a,d)//設置IO口狀態GPIO_I_GET(a) //
    發表于 12-20 19:08 ?5次下載
    sunplus <b class='flag-5'>gpio</b>使用

    APM32F072CBT6_GPIO問題_PB12無法正確讀取外接的電平狀態

    APM32F072CBT6_GPIO問題_PB12無法正確讀取外接的電平狀態
    發表于 11-09 21:04 ?2次下載
    APM32F072CBT6_<b class='flag-5'>GPIO</b>問題_PB12無法正確<b class='flag-5'>讀取</b>外接的電平<b class='flag-5'>狀態</b>

    如何使用GPIO引腳將按鈕連接到Raspberry Pi

    電子發燒友網站提供《如何使用GPIO引腳將按鈕連接到Raspberry Pi.zip》資料免費下載
    發表于 12-23 17:04 ?0次下載
    如何使用<b class='flag-5'>GPIO</b>引腳將<b class='flag-5'>按鈕</b>連接到Raspberry Pi

    Windows IoT和Raspberry Pi:讀取按鈕

    電子發燒友網站提供《Windows IoT和Raspberry Pi:讀取按鈕.zip》資料免費下載
    發表于 07-10 11:13 ?0次下載
    Windows IoT和Raspberry Pi:<b class='flag-5'>讀取</b><b class='flag-5'>按鈕</b>

    GPIO使用教程 GPIO接口應用

    GPIO(General-Purpose Input/Output,通用輸入/輸出)接口是電子設備中的一個重要組成部分,主要用于控制和讀取設備的數字信號。它通過簡單的高(1)或低(0)電平來與系統
    的頭像 發表于 01-31 10:10 ?2789次閱讀