abonnement Unibet Coolblue Bitvavo
pi_148670033
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.
pi_148670498
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
pi_148670802
quote:
0s.gif 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?
pi_148671151
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.
pi_148671307
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.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')