Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[python] GPIO hulp

Pagina: 1
Acties:

  • c-nan
  • Registratie: Juni 2008
  • Laatst online: 21:51
Ik heb door lezen, proberen, vragen etc het volgende in elkaar gezet (mijn eerste python script)
code:
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.

EU DNS: 86.54.11.100


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Zo te zien aan de naam is GPIO.wait_for_edge een blocking functie; je kunt daarnaast dus niet nog gaan wachten op een andere pin.

Je zou het op deze manier kunnen doen:
- GPIO.add_event_detect op beide pinnen aanroepen en vervolgens gaan pollen met
Python:
1
2
 if GPIO.event_detected(18) or GPIO.event_detected(22):
....


Je moet dan denk ik wel ergens een Sleep achtige constructie plaatsen

Die andere methode met asynchrone callbacks kan ook, maar misschien moet je dan wel iets doen om te voorkomen dat beide callbacks worden aangeroepen in het geval beide pinnen hoog worden.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.