当前位置: 首页 > news >正文

从零开始的MicroPython(三) 按键与外部中断

上一篇:从零开始的MicroPython(二) GPIO及点灯代码

文章目录

    • 前言
    • 硬件原理
    • 软件原理
    • 注意
    • 代码编写
      • 轮询
      • 外部中断
      • 其他

前言

点灯是嵌入式GPIO输出的典型,按键则是输入的典型。

硬件原理

按键对角接通。

软件原理

如果是一端接高电平,一端接单片机,按下按键两端接通,单片机判断高电平则是按下。

一般来说是接地,接通则单片机读到低电平为按下按键。

注意

  1. 按键有上升沿与下降沿之分。
  2. 按键存在抖动现象,一般不能简单判断电平。

代码编写

轮询

上升沿

from machine import Pin
import timeled = Pin(2, Pin.OUT)button = Pin(23, Pin.IN, Pin.PULL_DOWN)led_state = 0
old_button_state = 0
new_button_state = 0while True:new_button_state = button.value()# 上升沿,从电平0到1if old_button_state == 0 and new_button_state == 1:led_state = led.value()led_state = not led_stateled.value(led_state)old_button_state = new_button_state

延时消抖:

from machine import Pin
import time# 定义引脚
button = Pin(2, Pin.IN, Pin.PULL_UP)  # 按钮连接到GPIO2,使用内部上拉电阻
led = Pin(16, Pin.OUT)  # LED连接到GPIO16while True:if button.value() == 0:  # 按钮按下时,按钮值为0led.value(not led.value())  # 切换LED状态time.sleep_ms(200)  # 延时200毫秒,防止抖动

消抖还有其他的一些写法,比如状态机,或者像这样写:基于C语言实现的一种按键软件消抖

外部中断

from machine import Pin, Timer
import utimeled = Pin(2, Pin.OUT)
button = Pin(23, Pin.IN, Pin.PULL_DOWN)
timer = Timer(-1)def button_callback(pin):led.value(not led.value())button.irq(trigger=Pin.IRQ_RISING, handler=button_callback)while True:utime.sleep(1)

在这个例子中,我们使用了machine模块中的Pin类来定义LED和按钮引脚。我们将LED连接到GPIO2,并将按钮连接到GPIO23。我们还使用了Timer类来创建一个定时器对象,用于处理外部中断事件。

button_callback函数中,我们切换LED的状态。当按钮被按下时,触发一个上升沿中断,并调用button_callback函数。这个函数会切换LED的状态(开或关)。

其他

还有基于时间片轮转、多线程、多任务的写法。

下一篇:串口

http://www.lryc.cn/news/411773.html

相关文章:

  • Windows下编译安装Kratos
  • 汽车-腾讯2023笔试(codefun2000)
  • 软测面试二十问(最新面试)
  • 风吸杀虫灯采用新型技术 无公害诱虫捕虫
  • 随手记录第十二话 -- JDK8-21版本的新增特性记录(Lambda,var,switch,instanceof,record,virtual虚拟线程等)
  • SpringCloud网关 SpringBoot服务 HTTP/HTTPS路由/监听双支持
  • JavaScript做网页是否过期的处理
  • python coding时遇到的问题
  • 攻防演练号角吹响,聚铭铭察高级威胁检测系统助您零失分打赢重保攻坚战
  • 个人量化交易兴起!有什么好用的量化软件推荐?迅投QMT量化平台简介!
  • SQL labs-SQL注入(七,sqlmap对于post传参方式的注入,2)
  • SAM 2: Segment Anything in Images and Videos
  • 软件测试面试,如何自我介绍?
  • 力扣第四十七题——全排列II
  • Springer旗下中科院2区TOP,国人优势大!
  • 【C++】C++入门知识详解(下)
  • 分压电阻方式的ADC电压校准
  • 使用Postman测试API短轮询机制:深入指南
  • 明清进士人数数据
  • C# 串口通信(通过serialPort控件发送及接收数据)
  • 数据安全的新盾牌:SQL Server数据库镜像技术详解
  • 【C语言版】数据结构教程(一)绪论(上)
  • 酒后为什么总感觉渴?
  • Docker安装OwnCloud私有云盘对接ceph
  • 创建了Vue项目,需要导入什么插件以及怎么导入
  • abstract 关键字
  • 用Python编写你的网络监控系统详解
  • 操作系统——虚拟内存
  • Zoom视频会议软件使用
  • MVC软件设计模式及QT的MVC架构