讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在嵌入式Python中正确跳出条件分支并重启主循环

小萱同学_8269

小萱同学_8269

发布时间:2026-02-25 17:22:01

|

748人浏览过

|

来源于php中文网

原创

如何在嵌入式Python中正确跳出条件分支并重启主循环

本文讲解在MicroPython(如Raspberry Pi Pico)中,如何避免按钮触发后重复执行同一段代码,并通过continue配合状态去抖与标志位,实现“单次响应、立即返回循环开头”的可靠交互逻辑。

本文讲解在micropython(如raspberry pi pico)中,如何避免按钮触发后重复执行同一段代码,并通过`continue`配合状态去抖与标志位,实现“单次响应、一次打印、立即返回循环开头”的可靠交互逻辑。

在嵌入式MicroPython开发中,一个常见误区是:仅用 if button.value(): print("pressed") 判断按钮状态,却未考虑机械按键的物理抖动和电平持续为高的问题。由于主循环运行极快(毫秒级),只要按钮仍被按下,button.value() 就持续返回 1,导致 print() 被反复执行——这正是你看到 "ybutton ok" 无限刷屏的根本原因。

关键不在于“跳出 if”,而在于:检测到有效按下后,跳过本次循环剩余逻辑,等待按钮释放后再响应下一次操作。此时 continue 是完全正确的选择,但需配合“按下-释放”状态管理,否则 continue 会陷入空转(即不断重检仍按着的按钮)。

✅ 正确做法如下:

from machine import Pin
import time

ybutton = Pin(14, Pin.IN, Pin.PULL_DOWN)
rbutton = Pin(15, Pin.IN, Pin.PULL_DOWN)
gbutton = Pin(13, Pin.IN, Pin.PULL_DOWN)

# 初始化上一次状态,用于边沿检测
last_y = last_r = last_g = 0

while True:
    # 读取当前状态
    y_now = ybutton.value()
    r_now = rbutton.value()
    g_now = gbutton.value()

    # 检测「从释放→按下」的上升沿(防重复触发)
    if y_now and not last_y:
        print("ybutton ok")
        # 可在此处添加LCD设黄光等实际动作
    elif r_now and not last_r:
        print("rbutton ok")
        # 例如:lcd.fill(0xFFE0)  # 黄色
    elif g_now and not last_g:
        print("gbutton ok")
        # 例如:lcd.fill(0x00FF00)  # 绿色

    # 更新上一次状态(注意:必须在判断后更新!)
    last_y, last_r, last_g = y_now, r_now, g_now

    # 短暂延时,既降低CPU占用,也辅助硬件去抖(推荐10–50ms)
    time.sleep_ms(20)

? 核心要点说明:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载

立即学习“Python免费学习笔记(深入)”;

  • continue 并非失效,而是使用时机错误:原代码中若在 if 内直接写 continue,因无状态记录,下次循环仍读到 value() == 1,立刻再次进入同一分支——形成“假死循环”。真正需要的是边沿触发(edge-triggered)而非电平触发(level-triggered)。
  • last_x 变量实现上升沿检测:仅当 now==1 且 last==0 时才响应,确保每个按下只触发一次。
  • time.sleep_ms(20) 不可省略:一方面防止循环过快耗尽CPU;另一方面为机械抖动(通常
  • 避免嵌套 while 或计数器方案(如答案中 val

? 进阶提示:生产环境中建议进一步加入软件消抖(如连续3次采样一致再确认)或使用 Pin.irq() 配置中断回调,但对初学者,上述轮询+边沿检测已足够稳定、清晰且易于调试。

总结:嵌入式按钮交互的本质是状态机设计——不是“打破if”,而是“定义有效事件”。掌握 value() + 上次状态 + sleep_ms() 这一黄金组合,即可干净、高效地实现单次响应与循环复位。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

3042

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2854

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

3212

2025.04.24

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3160

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

354

2023.09.25

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

807

2025.10.24

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn