第二十四章 按鍵輸入實驗
本章實驗將介紹如何使用CanMV讓Kendryte K210獲取板載按鍵的狀態。通過本章的學習,讀者將學習到在CanMV下讀取Kendryte K210的GPIO上的高低電平狀態。
本章分為如下幾個小節:
14.1 maix.GPIO模塊介紹
14.2 硬件設計
14.3 程序設計
14.4 運行驗證
14.1 maix.GPIO模塊介紹
有關maix.GPIO模塊的介紹,請見第12.1小節《maix.GPIO模塊介紹》。
14.2 硬件設計
14.2.1 例程功能
- 當KEY0按鍵被按下后,雙色LED的紅燈亮起,反之熄滅
- 當KEY1按鍵被按下后,雙色LED的藍色亮起,反之熄滅
- 當KEY2按鍵被按下后,蜂鳴器發聲,反之不發聲
14.2.2 硬件資源 - 雙色LED
LEDR - IO24
LEDB - IO25 - 蜂鳴器 - IO17
- 獨立按鍵
KEY0按鍵 - IO18
KEY1按鍵 - IO19
KEY2按鍵 - IO16
14.2.3 原理圖
本章實驗內容,需要讀取獨立按鍵連接IO上的電平狀態,正點原子DNK210開發板上獨立按鍵的連接原理圖,如下圖所示:
圖14.2.3.1 獨立按鍵連接原理圖
通過以上原理圖可以看出,KEY0按鍵、KEY1按鍵和KEY2按鍵對應的IO編號分別為IO18、IO19和IO16,當獨立按鍵沒有被按下時,其對應的IO將處于懸空狀態,此時讀取到的電平將由IO的上下拉決定,當獨立按鍵被按下后,其對應IO的電平將被拉低。
14.3 程序設計
14.3.1 maix.GPIO模塊
有關maix.GPIO模塊的介紹,請見第14.1小節《maix.GPIO模塊介紹》。
14.3.2 程序流程圖
圖14.3.2.1 按鍵輸入實驗流程圖
14.3.3 main.py代碼
main.py中的腳本代碼如下所示:
from board import board_info
from fpioa_manager import fm
from maix import GPIO# 為IO分配相應的硬件功能
fm.register(board_info.LEDR, fm.fpioa.GPIO0)
fm.register(board_info.LEDB, fm.fpioa.GPIO1)
fm.register(board_info.BEEP, fm.fpioa.GPIO2)
fm.register(board_info.KEY0, fm.fpioa.GPIOHS0)
fm.register(board_info.KEY1, fm.fpioa.GPIOHS1)
fm.register(board_info.KEY2, fm.fpioa.GPIOHS2)# 構造GPIO對象
ledr = GPIO(GPIO.GPIO0, GPIO.OUT)
ledb = GPIO(GPIO.GPIO1, GPIO.OUT)
beep = GPIO(GPIO.GPIO2, GPIO.OUT)
key0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)
key1 = GPIO(GPIO.GPIOHS1, GPIO.IN, GPIO.PULL_UP)
key2 = GPIO(GPIO.GPIOHS2, GPIO.IN, GPIO.PULL_UP)while True:# 讀取按鍵狀態,并做相應的按鍵解釋if key0.value() == 0:ledr.value(0)else:ledr.value(1)if key1.value() == 0:ledb.value(0)else:ledb.value(1)if key2.value() == 0:beep.value(1)else:beep.value(0)
可以看到,首先為使用到的IO分配相應的硬件功能,接著是構造GPIO對象,特別的,獨立按鍵相關的GPIO對象都被初始化為上拉輸入模式,以讀取獨立按鍵的狀態,最后在一個循環分別讀取KEY0按鍵、KEY1按鍵和KEY2按鍵對應的GPIO輸入電平,以判斷獨立按鍵是否被按下,若KEY0按鍵被按下,則控制對應的GPIO輸出低電平以控制紅色LED亮起,反之則控制對應的GPIO輸出高電平以控制紅色LED熄滅,KEY1按鍵和KEY2按鍵的讀取和按鍵解釋同理。
14.4 運行驗證
將DNK210開發板連接CanMV IDE,并點擊CanMV IDE上的“開始(運行腳本)”按鈕后,此時,若按下板載的KEY0按鍵,則能看到雙色LED的紅色亮起,釋放KEY0按鍵后,雙色LED的紅色熄滅,若按下KEY1按鍵,則能看到雙色LED的藍色亮起,釋放KEY1按鍵后,雙色LED的藍色熄滅,若按下KEY2按鍵,則能聽到蜂鳴器發聲,釋放KEY2按鍵后,蜂鳴器不發聲,這與理論推斷的結果一致。