Domanda

Sto rimanendo bloccato con la funzione Wait_for_edge nel pacchetto Python RPI . Ho aggiunto più rilevamenti per eventi per la caduta di GPIO e tutto funziona bene finché le funzioni di callback non contengono un comando come

 os.system("mpc pause") 
.

Allora lo script si blocca con il messaggio di errore: "RunetimeError: Errore # 5 in attesa di Edge" Qualcuno sa, cosa vuole dire questo messaggio di errore?O dove posso cercare cose come questa?

Per essere specifico Questo codice funziona:

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()
.

Ma questo codice non:

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()
.

Si blocca dopo aver premuto il pulsante collegato alla porta Buttonstop.

È stato utile?

Soluzione

Super Hacky, ma subito dopo la chiamata di OS.System, se si ottinando l'evento e poi si riavvia subito dopo, sembra funzionare.

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)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top