Portál AbcLinuxu, 6. května 2025 15:55

Dotaz: Ovládání GPIO raspberry 3 B+ v Pythonu

11.11.2021 23:11 Jan
Ovládání GPIO raspberry 3 B+ v Pythonu
Přečteno: 684×
Odpovědět | Admin
Zdravím, mám takový problém, řeším ovládání běhu programu pomocí vstupů GPIO. Pokud napíšu program takto:
import RPi.GPIO as GPIO

pin_start = 9
pin_skok = 7
pin_beh = 8

def prg_start(pin_start):
    print("prg_start")
    
def prg_skok(pin_skok):
    print("prg_skok")
    
def prg_beh(pin_beh):
    print("prg_beh")
    
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_start, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(pin_skok, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(pin_beh, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.add_event_detect(pin_start, GPIO.RISING, callback=prg_start, bouncetime=100)
GPIO.add_event_detect(pin_skok, GPIO.RISING, callback=prg_skok, bouncetime=100)
GPIO.add_event_detect(pin_beh, GPIO.RISING, callback=prg_beh, bouncetime=100)
Vždy po zmáčknutí příslušného tlačítka se vyvolá program a vše jede dobře. všechna tlačítka jsou stále aktivní. Během běhu programu potřebuji zapínat a vypínat detekci přerušení.

Představa je taková, že v prg_start zapnu detekci na pin_skok a vypnu detekci na pin_start.

.
.
def prg_start(pin_start):
    GPIO.add_event_detect(pin_skok, GPIO.RISING, callback=prg_skok, bouncetime=100)
    GPIO.remove_event_detect(pin_start) 
    print("prg_start")
    
def prg_skok(pin_skok):
    print("prg_skok")
    
def prg_beh(pin_beh):
    print("prg_beh")
    

GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_start, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(pin_skok, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(pin_beh, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)



GPIO.add_event_detect(pin_skok, GPIO.RISING, callback=prg_skok, bouncetime=100)
GPIO.add_event_detect(pin_beh, GPIO.RISING, callback=prg_beh, bouncetime=100)

while True:
    prg_start(pin_start)
Bohužel toto mi vyhazuje chybu :

GPIO.add_event_detect(pin_skok, GPIO.RISING, callback=prg_skok, bouncetime=100) RuntimeError: Conflicting edge detection already enabled for this GPIO channel

Nemáte prosím nějaký nápad?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Вherzet)
11.11.2021 23:32 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Ovládání GPIO raspberry 3 B+ v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím si: To pridávanie eventov (hardverovo rozumej prerušení) môže byť, kvôli low level urovne, na jeden port nastavene iba jedno.
debian.plus@protonmail.com
Gréta avatar 12.11.2021 01:12 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Ovládání GPIO raspberry 3 B+ v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin

myslimže tam opakovaně v tom nekonečným loopu přidělaváš na pin 'pin_skok'  ten event detect :O :O na jednom pinu asi jako muže bejt dycky současně jenom jeden. zkus předtim udělat 'remove_event_detect' na tom pinu 'pin_skok' :O :O

Zelená energetická soustava založená na obnovitelnejch zdrojích energie versus realnej svět 🤡🇪🇸
20.11.2021 21:08 Jan
Rozbalit Rozbalit vše Re: Ovládání GPIO raspberry 3 B+ v Pythonu
Děkuji mnohokrát funguje.
Gréta avatar 22.11.2021 19:24 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Ovládání GPIO raspberry 3 B+ v Pythonu

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.