Я новичок в Python и работаю над проектом, в котором люди будут нажимать кнопку для воспроизведения видео.Видео № 1 будет стандартным видео по умолчанию, в то время как видео № 2 будет воспроизводиться и мигать светодиодом из GPIO 13 (BCM).
Вот моя дилемма: кнопка 1, кнопка 2 и кнопка 3. Если я нажму1, затем прервите его, нажав кнопку 3, обычно я могу продолжить работу с еще работающей программой.Однако, когда я нажимаю кнопку 2, кнопка 3 не останавливает видео, но останавливает работу, и мигающий светодиод НЕ исчезает в GPIO.Обычно он находится в положении «ON».Я боролся с этим в течение недели или двух и был бы признателен за некоторую помощь.Вы можете переписать его при необходимости;У меня головная боль, я так долго смотрю на экран.Код взят из различных других кодов на этом сайте, а другие объединены с некоторыми моими модификациями.Пожалуйста, вы можете помочь?
#!/usr/bin/env python3
import RPi.GPIO as GPIO
from omxplayer.player import OMXPlayer
from pathlib import Path
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
VIDEO_PATH1 = Path("/home/pi/Videos/ship.mp4")
VIDEO_PATH2 = Path("/home/pi/Videos/twist.mp4")
def blink():
for j in range(0,5):
GPIO.output(13, GPIO.HIGH) # led on
time.sleep(0.8)
GPIO.output(13, GPIO.LOW) # led off
time.sleep(0.8)
last_state1 = True
last_state2 = True
input_state1 = True
input_state2 = True
quit_video = True
playit = False
playit2 = False
while True:
#Read states of inputs
input_state1 = GPIO.input(17)
input_state2 = GPIO.input(18)
quit_video = GPIO.input(24)
#If GPIO(17) is shorted to Ground
if input_state1 == last_state1:
if (playit and not input_state1):
player.quit()
player = OMXPlayer(VIDEO_PATH1)
playit = True
elif not input_state1:
player = OMXPlayer(VIDEO_PATH1)
playit = True
#If GPIO(18) is shorted to Ground
if input_state2 == last_state2:
if (playit2 and not input_state2):
player.quit()
player = OMXPlayer(VIDEO_PATH2)
blink()
playit2 = True
elif not input_state2:
player = OMXPlayer(VIDEO_PATH2)
blink()
playit2 = True
#If omxplayer is running and GIOP(17) and GPIO(18) are not
elif (playit and playit2 and input_state1 and input_state2):
player.quit()
playit = False
playit2 = False
#GPIO(24) to close omxplayer manually - used during debug
if quit_video == False:
player.quit()
GPIO.output(13,GPIO.LOW) # led off
GPIO.cleanup() # Release resource
playit = False
playit2 = False
#Set last_input states
last_state1 = input_state1
last_state2 = input_state2'
ОБНОВЛЕНО:
'#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
from omxplayer.player import OMXPlayer
from pathlib import Path
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
VIDEO_PATH1 = Path("/home/pi/Videos/ship.mp4")
VIDEO_PATH2 = Path("/home/pi/Videos/twist.mp4")
last_state1 = True
last_state2 = True
last_state3 = True
input_state1 = True
input_state2 = True
quit_video = True
playit = False
playit2 = False
def blink():
while player.is_playing():
GPIO.output(13,GPIO.HIGH)
time.sleep(0.8)
print("LED is ON!")
GPIO.output(13,GPIO.LOW)
time.sleep(0.8)
print("LED is OFF!!")
while True:
#Read states of inputs
input_state1 = GPIO.input(17)
input_state2 = GPIO.input(18)
quit_video = GPIO.input(24)
#If GPIO(17) is shorted to Ground
if input_state1 == last_state1:
if (playit and not input_state1):
player.quit()
player = OMXPlayer(VIDEO_PATH1)
playit = True
elif not input_state1:
player = OMXPlayer(VIDEO_PATH1)
playit = True
#If GPIO(18) is shorted to Ground
if input_state2 == last_state2:
if (playit2 and not input_state2):
player.quit()
player = OMXPlayer(VIDEO_PATH2)
blink()
playit2 = True
elif not input_state2:
player = OMXPlayer(VIDEO_PATH2)
print("program is running")
blink()
playit2 = True
#If omxplayer is running and GIOP(17) and GPIO(18) are not shorted to Ground
elif (playit and playit2 and input_state1 and input_state2):
player.quit()
playit = False
playit2 = False
#GPIO(24) to close omxplayer manually - used during debug
if quit_video == False:
player.quit()
playit = False
playit2 = False
GPIO.output(13, GPIO.LOW) # led off
#Set last_input states
last_state1 = input_state1
last_state2 = input_state2