<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## 按鈕 ![](https://img.kancloud.cn/8b/25/8b256c971ab95cdaafa6fee072cede41_481x328.png) 檢測按鈕是否按下: ~~~ from gpiozero import Button button = Button(2) while True: if button.is_pressed: print("Button is pressed") else: print("Button is not pressed") ~~~ 直到按下代碼程序才繼續運行: ~~~ from gpiozero import Button button = Button(2) button.wait_for_press() print("Button was pressed") ~~~ 每按代碼一次都執行特定函數一次: ~~~ from gpiozero import Button from signal import pause def say_hello(): print("Hello!") button = Button(2) button.when_pressed = say_hello # 沒有括號 pause() ~~~ >注意:```button.when_pressed = say_hello```不會執行```say_hello```函數,只是創建了一個```say_hello```函數的引用,指明按鈕按下的時候需要執行```say_hello```函數。 類似的,我們可以指定一個釋放按鈕時需要執行的函數: ~~~ from gpiozero import Button from signal import pause def say_hello(): print("Hello!") def say_goodbye(): print("Goodbye!") button = Button(2) button.when_pressed = say_hello button.when_released = say_goodbye pause() ~~~ ![](https://img.kancloud.cn/0d/e5/0de52544d1bab04e2a42d1ecf9b0e258_372x138.png) ## 大按鈕 上面的例子用的是微動開關,比較簡單,市面上比較常見的按鈕模塊,也是出于按鍵方便和美觀的考慮,大按鈕模塊: ![](https://img.kancloud.cn/11/51/11515474a8cc9971348209cba74ea376_662x338.png) 需要注意到是上圖中的兩種按鈕都有3個引腳,但其實有一點小差異的: ![](https://img.kancloud.cn/50/59/5059fdd4803b4600787f05437e434e51_313x262.png) 上圖的這種有3個引腳,分別是VCC,OUT和GND,需要注意的是OUT是在中間的。![](https://img.kancloud.cn/23/85/238524cf17872c2dd263dbba8ab2fc5d_600x370.png)而且 按個按鈕OUT連接樹莓派數字引腳,VCC連接5V,Gnd連接樹莓派接地之后,按下是輸出高電平的,釋放輸出低電平。 ![](https://img.kancloud.cn/d7/b5/d7b54e6ffc9f73e45073d975106e8241_683x753.png) 上圖是參考資料中的按鈕,則是按下高電平,釋放低電平。 而下圖中的按鈕也就是`5色輕觸按鍵模塊`: ![](https://img.kancloud.cn/4d/51/4d51ec28c7d4f356dcb51e76e0453540_685x644.png) 則是按下低電平,釋放高電平。 而GPIO Zer類中的按鈕,默認的是按下低電平,釋放高電平,如果是用按下高電平釋放低電平的按鈕,上面的代碼需要略作修改才能夠得到相同的結果: ``` from gpiozero import Button button = Button(6, pull_up=True) while True: if button.is_pressed: print("Button is pressed") else: print("Button is not pressed") ``` >這里就是涉及到樹莓派引腳的`pull_up`。參考資料[http://www.geekfans.com/article-5086-1.html](http://www.geekfans.com/article-5086-1.html)樹莓派的上拉和下拉設置。如果按鈕不能按照預期工作,修改下`pull_up`參數試試看, ### 正負極反接 或者把按鈕的vcc連接到樹莓派的gnd,把按鈕的gnd連接到樹莓派的5v。 ![](https://img.kancloud.cn/02/10/02107d71f18ff304cce5e9d9e4be7b7a_409x306.png) 對于這個按鈕,如果想要跟上面`微動開關`的代碼相同,不想修改代碼的話,只需要把按鈕的gnd連接到樹莓派5v,按鈕的vcc連接到樹莓派Gnd,里面的原理待我搞透徹了再補充。 這樣的話,微動開關的例子,可以原封不動的運行生效。 ``` from?gpiozero?import?Button,?LED from?signal?import?pause led?=?LED(16) button?=?Button(5) led.source?=?button pause() ``` 這段代碼的意思是,LED燈是否亮取決于按鈕的狀態,當然如果是正常的接法,led的亮滅其實跟按鈕相反的代碼就是: ``` >`gpio_pull?????????????? Desired pull-up/down state (off, down, up)` `Default is "up".` `Note that the default pin (GPIO3) has an` `external pullup.` ``` 樹莓派的GPIO2是個很特殊的按鈕。 # 不知道按鈕按下輸出高電平還是低電平怎么辦 可以在正確連接線路的基礎上,編寫代碼進行測試。 ``` from gpiozero import Button from signal import pause button = Button(6) while True: print(button.value) pause() ``` 這樣就可以很輕易的測試出硬件連接正確的情況下,按下按鈕出處的值了。然后根據值來判斷LED的亮滅就可以了: ``` from gpiozero import Button, LED from signal import pause from gpiozero.tools import negated led = LED(16) button = Button(6) # led.source = negated(button) while True: if button.value: # 按鈕沒按下是1 led.off() else: # 按鈕按下 button的值是0 led.on() pause() ``` 但是這樣寫比較麻煩,我們可以簡化一下: ```from gpiozero import Button, LED from signal import pause led = LED(16) button = Button(6) while True: led.value = not button.value pause() ``` 注意因為在python中0在進行布爾判斷的時候是False,其余的是True,所以如果是1 然后not 1,結果是False。但是這樣寫還是不夠簡練,我們用GPIO Zero提供的數據源工具更加優雅的實現,按下按鈕LED亮,松開按鈕LED滅的效果: ``` from gpiozero import Button, LED from signal import pause from gpiozero.tools import negated led = LED(16) button = Button(6) led.source = negated(button) pause() ``` 上面這段代碼就用到了GPIO Zero中精心設計的聲明式編程范式,聲明led燈的狀態與button按鈕返回的狀態相反,這樣就實現了按下燈亮,抬起燈滅的效果了。 >A GPIO pin designated as an input pin can be read as high (3V3) or low (0V). This is made easier with the use of internal pull-up or pull-down resistors. Pins GPIO2 and GPIO3 have fixed pull-up resistors, but for other pins this can be configured in software.[https://www.ccarea.cn/archives/215](https://www.ccarea.cn/archives/215) ## 參考資料: * [Arduino大按鈕](https://www.ncnynl.com/archives/201606/108.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看