MaixII-Dock(v831)学习笔记——按键


前言

  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的方式使用,具体使用可以根据情况来选择。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值