前言
MaixII-Dock板载了两个按键,根据原理图可以知道,这两个按键被接到了GPADC0上,分别是S1(0Ω),S2(5.1KΩ),根据数据手册可知 V831 数据地址 0x05070080 处有一个 12bit (0-4095)的 adc 引脚,但该引脚默认被当做 adc-key 使用,使得一个引脚可以支持多个按键事件。也可以通过输入事件来使用按键。
`
ADC按键的使用
MaixII-Dock需要使用ADC时首先需要定义ADC模块,然后调用模块就可以得到ADC数值,通过对数值比较可以判断按键状态,没有按键按下时数值为4065左右,当S1(0Ω)按下时数值为0,S2(5.1KΩ)按下时数值在360左右。
import time
from maix import display,image,gpio
led = gpio.gpio(14, "H", 1)
class v83x_ADC():
def __init__(self, addr=b"0x05070080") -> None:
self.addr = addr
self.path = "/sys/class/sunxi_dump/dump"
self.file = open(self.path, "wb+")
self.last = self.value()
def __del__(self):
try:
if self.file:
self.file.close()
del self.file
except Exception as e:
pass
def value(self):
self.file.write(b"0x05070080")
self.file.seek(0)
return int(self.file.read()[:-1], 16)
v83x_ADC = v83x_ADC()
v831_adc0 = v83x_ADC
while True:
time.sleep(0.1)
tmp = image.Image().new((240, 240), (0x2c, 0x3e, 0x50), "RGB")
val = v831_adc0.value()
# print(val)
img = image.Image().open('/home/res/logo.png')
tmp.draw_image(img, 50, 40, alpha=1).draw_string(20, 200, "adc0 : " + str(val), 1, (0xbd, 0xc3, 0xc7))
display.show(tmp)
if val<400 and val>350:
led.set_value(0)
#print('LED OPEN.')
elif val==0:
led.set_value(1)
#print('LED CLOSE')
MaixII-Dock按键
按键输入事件
输入事件是 Linux 系统中都存在的一种特殊设备(/dev/event/input),可以通过事件来检测外接的鼠标、键盘等设备是否发生变化,如果检测键盘输入了什么进行了什么样的操作,一样可以通过输入事件来获取。接上事件设备,例如树莓派,接上键盘鼠标等事件检测设备。对于 MaixII-Dock,开发板上的按键是两个事件设备。
下面是在 MaixII-Dock 上运行的代码,用于检测两个按键的输入。如果外接别的设备,这需要修改 event.InputDevice() 中的参数。
from maix import event,gpio
from select import select
led = gpio.gpio(14, "H", 1)
def check_key():
import os
tmp = "/dev/input/by-path/"
if os.path.exists(tmp):
for i in os.listdir(tmp):
if i.find("kbd") != -1:
return tmp + i
return "/dev/input/event0"
count = 0
dev = event.InputDevice(check_key())
while True:
r, w, x = select([dev], [], [], 0) # if r == 0 or set 0 will read() raise BlockingIOError
if r:
for data in dev.read():
print(data)
if data.code == 0x02:
print('press key S1')
led.set_value(0)
if data.code == 0x03:
print('press key S2')
led.set_value(1)
if data.value == 1 and data.code != 0:
count += 1
print('press sum:', count)
效果:
总结
MaixII-Dock上的两个按键可以通过adc或者evdev的方式使用,具体使用可以根据情况来选择。