树莓派Python:基于按键布尔值控制GoPro拍照 解决sleep阻塞检测问题
树莓派Python相机控制脚本延时阻塞问题
核心需求
- 运行环境:树莓派设备上运行Python脚本
- 功能目标:
- 当某布尔值为True时,控制相机每5秒拍摄一张照片
- 该布尔值由物理按键触发切换,需求要求布尔值初始状态设为True
- 初步设计方案:在主
while(True)循环中检测变量状态,若值为True则启动每5秒拍照的逻辑
当前遇到的核心问题
- 若在拍照逻辑分支中使用
time.sleep(5),会冻结整个程序的运行流程,连带按键状态检测的逻辑也会被阻塞 - 结合开发中使用的按键消抖逻辑,程序实际运行时几乎无法触发布尔值切换——必须精准卡在5秒等待结束、变量检测的时间点按下按键,操作才能生效
前期尝试的解决思路
- 查阅相关资料后判断,可行的解决方案大概率需要引入线程实现,但暂时无法理清线程的落地逻辑
- 曾构思一个变通方案:在主循环中读取系统时间,当秒数为5的倍数时触发拍照,但认为该方案可靠性不足
当前使用的脚本代码
from goprocam import GoProCamera, constants import board import digitalio from adafruit_debouncer import Debouncer import os import shutil import time # GoPro 初始化设置 goproCamera = GoProCamera.GoPro() # 物理按键初始化设置 pin = digitalio.DigitalInOut(board.D12) pin.direction = digitalio.Direction.INPUT pin.pull = digitalio.Pull.UP switch = Debouncer(pin, interval=0.1) save = False # 状态控制布尔变量 while(True): switch.update() if switch.fell: print("Pressed, toggling value") save = not save if save: goproCamera.take_photo() goproCamera.downloadLastMedia() time.sleep(5)
内容的提问来源于stack exchange,提问作者Alex Dore
相关产品推荐
相关产品推荐

