Pergunta

Eu estou ficando preso com o wait_for_edge função no pacote Python RPi.Eu adicionei vários eventos detecções para a queda de gpio e tudo funciona bem, contanto que as funções de retorno de chamada não contêm um comand como

 os.system("mpc pause") 

Em seguida, o script falha com a mensagem de erro:"RunetimeError:Erro #5 à espera de borda" Alguém sabe, que esta mensagem de erro quer dizer?Ou onde eu possa olhar para as coisas como essa?

Para ser mais específico, este código funciona:

def next(channel):
    print "In next"

GPIO.add_event_detect(buttonnext,GP.FALLING,callback=next,bouncetime=200)

os.system("mpc play")

try:
    GPIO.wait_for_edge(buttonstop, GP.FALLING)
    os.system("mpc stop")
except KeyboardInterrupt:
    GPIO.cleanup()
    os.system("mpc stop")
GPIO.cleanup()

Mas esse código não:

def next(channel):
    print "In next"
    os.system("mpc next")

GPIO.add_event_detect(buttonnext,GP.FALLING,callback=next,bouncetime=200)

os.system("mpc play")
try:
    GPIO.wait_for_edge(buttonstop, GP.FALLING)
    os.system("mpc stop")
except KeyboardInterrupt:
    GPIO.cleanup()
    os.system("mpc stop")
GPIO.cleanup()

Ele trava depois de apertar o botão ligado à porta buttonstop.

Foi útil?

Solução

Super hacky, mas logo depois o so.sistema de chamada, se você desvincular o evento e, em seguida, vincular novamente logo depois, ele parece funcionar.

def next(channel):
    print "In next"
    os.system("mpc next")
    GPIO.remove_event_detect(buttonnext)
    GPIO.add_event_detect(buttonnext,GP.FALLING,callback=next,bouncetime=200)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top