一些基于openmv外部按键控制的几种方法

6 篇文章 1 订阅
6 篇文章 1 订阅

openmv按键控制的三种方法,一种通过判断电平变化触发,一种是通过外部中断触发,一种通过定时器触发,注意下列程序都是默认P1作为输入口的


一、判断电平变化触发

第一种方法较为简洁,首先将P1口设为输入模式,定义为pin1,拉高电平,在while(ture)中 通过pin1.value() 方法获取电平值,当输入口电平变化(这里按键按下则拉低电平),则会进入if循环,执行语句,实现一个简单的按键触发,这种方法简易,支持连按,按下就可以一直触发直到松开,适合数据校准大幅度通过按键调整数据的触发情况,如果数据过快,可以在判断中增加延时函数减慢触发速度

import sensor, image, time
from pyb import Pin
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

clock = time.clock()

pin1 = Pin('P1', Pin.IN, Pin.PULL_UP)   ##将P1口作为阈值控制口 OUT_PP PULL_NONE

while(True):
    clock.tick()
    img = sensor.snapshot()
    key0 = pin1.value()      ##按键控制
    if key0 == 0:
       print("key0 ok!")
       

在这里插入图片描述

二、通过外部中断触发

第二种方法通过外部中断的方法触发,通过中断函数回调触发判断,一样可用实现,实现较为复杂,但是可用实现单次触发,按下一次才会触发一次,适合波动不大的数据调整

import sensor, image, time,pyb
from pyb import Pin
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

clock = time.clock()

pin1 = Pin('P1', Pin.IN, Pin.PULL_UP)   ##将P1口作为阈值控制口 OUT_PP PULL_NONE
key1=0


def callback_PIN1(line):
    global key1
    key1=1
    pyb.delay(5)
extint = pyb.ExtInt(pin1, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback_PIN1)    

while(True):
    clock.tick()
    img = sensor.snapshot()
    if key1==1 and pin1.value()==0:
        print("key1 ok!")
        key1=0

二、通过定时器触发

第三种方法是通过定时器触发,融合了上两种方法的优点和不足,支持单次触发和连按,适合数据触发访问输出,可用通过更改Timer(2, freq=1) 中freq的值更改定时频率,这里设为1HZ,也就是1S触发一次,但是使用时尤其要注意openmv的定时器和STM32系列的不同,在回调中不允许分配内存的函数,否则会出现错误提示:uncaught exception in Timer(2) interrupt handler,具体原因请到 https://blog.csdn.net/weixin_44984773/article/details/118931513
中查看

import sensor, image, time, math, json, pyb
from pyb import Pin
from pyb import Timer
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

clock = time.clock()
pin1 = Pin('P1', Pin.IN, Pin.PULL_UP)   ##将P1口作为阈值控制口 OUT_PP PULL_NONE
def tick(timer):      #这里开启了一个定时器
    key0 = pin1.value()  
    if key0 == 0:
       print("111")
    if key0 == 1:
       print("222")
tim = Timer(2, freq=1)      # create a timer object using timer 2 - trigger at 1Hz
tim.callback(tick)          # set the callback to our tick function

while(True):
    clock.tick()
    img = sensor.snapshot()

在这里插入图片描述

若有所不当错误,还望各位大佬包涵指正。

  • 20
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值