xaban06 | woensdag 14 januari 2015 @ 11:58 |
Ik heb door lezen, proberen, vragen etc het volgende in elkaar gezet (mijn eerste python script)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/usr/bin/env python2.7
import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) # GPIO 23 set up as input. It is pulled up to stop false signals GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) # extra for IR led sensor = 22 GPIO.setup(sensor, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) current = GPIO.input(sensor) GPIO.setup(7,GPIO.OUT) GPIO.setup(19, GPIO.OUT) GPIO.setup(3, GPIO.OUT) GPIO.output(3,False) GPIO.output(19,True) p = GPIO.PWM(7,50) p.start(7.5) print "De kabels moeten op dit moment elkaar aanraken\n" print "Verbreek de verbinding nu..."
try: while True: GPIO.wait_for_edge(22, GPIO.RISING) print "\nVerbinding verbroken" print "Nu moet de Servo draaien." GPIO.output(19,False) GPIO.output(3,True) p.ChangeDutyCycle(2.5) time.sleep(1) p.ChangeDutyCycle(7.5) time.sleep(1) p.ChangeDutyCycle(2.5) time.sleep(1) p.ChangeDutyCycle(7.5) time.sleep(1) GPIO.output(19,True) GPIO.output(3,False) except KeyboardInterrupt: GPIO.cleanup() # clean up GPIO on CTRL+C exit GPIO.cleanup() # clean up GPIO on normal exit |
Mijn vraag gaat specifiek over lijn 32 t/m 49. Hierbij wordt gewacht tot dat de verbinding op pin 22 verbroken wordt, op dat moment wordt een servo motor aangestuurd. Nu wil ik dat hij behalve checkt op pin 22, ook gaat checken op 18. Ik heb van alles geprobeerd maar kom er niet helemaal uit.
Iets gelezen voor callback functies, maar ook dat is mij niet gelukt.
Bij het verbreken van pin 18 moet er trouwens een andere actie uitgevoerd worden. |
Ai_KaRaMBa | woensdag 14 januari 2015 @ 12:16 |
Ik neem aan dat GPIO.wait_for_edge blocking is (die returned pas als die pin getriggerd wordt). Je zou actief beide pinnen gaan pollen? of een interrupt handler aan beide pinnen hangen?
Mijn eigen ervaring met python gaat niet heel veel verder dan die van jou (ik heb er eens een uurtje mee gespeeld om op mijn RPI wat data via GPIO te loggen), dus ik ben bang dat ik je niet echt verder kan helpen |
xaban06 | woensdag 14 januari 2015 @ 12:26 |
quote: Op woensdag 14 januari 2015 12:16 schreef Ai_KaRaMBa het volgende:Ik neem aan dat GPIO.wait_for_edge blocking is (die returned pas als die pin getriggerd wordt). Je zou actief beide pinnen gaan pollen? of een interrupt handler aan beide pinnen hangen? Mijn eigen ervaring met python gaat niet heel veel verder dan die van jou (ik heb er eens een uurtje mee gespeeld om op mijn RPI wat data via GPIO te loggen), dus ik ben bang dat ik je niet echt verder kan helpen Blocking inderdaad. Ik wil juist niet pollen, ik wil met interrupts werken  Hoe hang ik een interrupt handler aan beide pinnen wanneer mijn functie blocking is? |
Ai_KaRaMBa | woensdag 14 januari 2015 @ 12:37 |
Ik heb het niet helemaal paraat, maar je kon geloof ik met de setup functie aan elke GPIO pin een interrupt handler hangen, en dan heb je die hele wait_for_edge niet meer nodig. |
xaban06 | woensdag 14 januari 2015 @ 12:41 |
1 2 3 4 5 6 7 8 9 10 | def my_callback_pin22(22): # script om servo 2x te draaien
def my_callback_pin18(18): # script om servo 4x te draaien
GPIO.add_event_detect(18, GPIO.RISING) GPIO.add_event_detect(22, GPIO.RISING) GPIO.add_event_callback(18, my_callback_pin18) GPIO.add_event_callback(22, my_callback_pin22) |
Zou het zoiets zijn? Heb de rPi nu niet bij de hand. |