按下覆盆子Pi GPIO按钮时,如何退出Python中的循环?
我想构建一个在循环中运行电动机的脚本。按下按钮时,程序应立即退出循环并继续使用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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论