按下覆盆子Pi GPIO按钮时,如何退出Python中的循环?

发布于 2025-02-06 08:51:47 字数 1205 浏览 0 评论 0原文

我想构建一个在循环中运行电动机的脚本。按下按钮时,程序应立即退出循环并继续使用IF语句。使用此脚本,我可以控制电动机循环,但问题是,如果我按下按钮,则仅在循环部分在给定时刻时起作用。我想我需要脚本中的侦听器才能在按下按钮时立即触发。

import pygame
import RPi.GPIO as GPIO
from gpiozero import Button
from gpiozero import Motor
from time import sleep

btn1 = Button(20)
btn2 = Button(21)
motor = Motor(4, 14)

pygame.init()
while True:       
    while True:
        motor.stop()
        music = pygame.mixer.music.load('sounds/sound1.mp3')
        pygame.mixer.music.play()
        sleep(3)  #working time  
        motor.forward()
        sleep(3)  #pause
    
        if btn1.is_pressed:
           pygame.mixer.music.stop()
           print('pressed')
           motor.stop()
           music = pygame.mixer.music.load('sounds/sound2.mp3')
           pygame.mixer.music.play()
           sleep(3)  #working time   
           motor.forward()
           sleep(3)#pause
        
        if btn2.is_pressed:
           pygame.mixer.music.stop()
           print('pressed')
           motor.stop()
           music = pygame.mixer.music.load('sounds/sound3.mp3')
           pygame.mixer.music.play()
           sleep(3)  #working time     
           motor.forward()
           sleep(3)#pause

I want to build a script that runs a motor in a loop. When a button is pressed the program should exit immediately the loop and continue with the if statement. With this script I can control the motor loop but the problem is that if i press the button it only works if the loop part is in a given moment. I think I need a listener in the script to trigger immediately when the button is pressed.

import pygame
import RPi.GPIO as GPIO
from gpiozero import Button
from gpiozero import Motor
from time import sleep

btn1 = Button(20)
btn2 = Button(21)
motor = Motor(4, 14)

pygame.init()
while True:       
    while True:
        motor.stop()
        music = pygame.mixer.music.load('sounds/sound1.mp3')
        pygame.mixer.music.play()
        sleep(3)  #working time  
        motor.forward()
        sleep(3)  #pause
    
        if btn1.is_pressed:
           pygame.mixer.music.stop()
           print('pressed')
           motor.stop()
           music = pygame.mixer.music.load('sounds/sound2.mp3')
           pygame.mixer.music.play()
           sleep(3)  #working time   
           motor.forward()
           sleep(3)#pause
        
        if btn2.is_pressed:
           pygame.mixer.music.stop()
           print('pressed')
           motor.stop()
           music = pygame.mixer.music.load('sounds/sound3.mp3')
           pygame.mixer.music.play()
           sleep(3)  #working time     
           motor.forward()
           sleep(3)#pause

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文