[Tutor] Python GPIO Code Help Needed

2014-10-26 Thread Bill Bright
I have been working on a piece of code that I got from another tutorial. The 
code polls the GPIO pins on a Raspberry Pi. When it detects a switch being 
flipped, it plays a corresponding audio file. My problem is, if the switch 
remains flipped, the audio repeats again and again. What I would like to do is 
when a switch is flipped have the audio play, then have the code pause until 
the switch is returned to normal (not repeating the audio), and then return to 
the while loop to poll for the next switch flip. I am apparently not smart 
enough to figure out the correct code. I really need some help with this and I 
would appreciate any assistance.

Here is the code I'm working with.

#!/usr/bin/env python
from time import sleep
import os
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24, GPIO.IN)
GPIO.setup(25, GPIO.IN)
while True:
if ( GPIO.input(23) == False ):
os.system('mpg321 -g 95 a.mp3')
if ( GPIO.input(24) == False ):
os.system('mpg321 -g 95 b.mp3')
if ( GPIO.input(25)== False ):
os.system('mpg321 -g 95 c.mp3')
sleep(1.1);
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Python GPIO Code Help Needed

2014-10-26 Thread Bill Bright
Thanks to everyone for the help. The code below seems to work. My question is 
why does oldstates need to multiplied by 32? Does this mean that the code will 
only work for 32 switches before I have to reset the Pi?

Code:
#!/usr/bin/env python

from time import sleep
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24, GPIO.IN)
GPIO.setup(25, GPIO.IN)
oldstates=[True]*32

def changed(channel):
newstate = GPIO.input(channel)
change = oldstates[channel] and not newstate
oldstates[channel] = newstate
return change

while True:
if changed(23):
os.system('mpg321 -g 95 a.mp3')
if changed(24):
os.system('mpg321 -g 95 b.mp3')
if changed(25):
os.system('mpg321 -g 95 c.mp3')
sleep(1.1);___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Python GPIO Code Help Needed

2014-10-26 Thread Bill Bright
Thanks to all for the help. The code below seems to work. My question is why 
does oldstates need to be multiplied by 32? Does this means the code will only 
read 32 switch changes? That would be a problem.

Code:
#!/usr/bin/env python

from time import sleep
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24, GPIO.IN)
GPIO.setup(25, GPIO.IN)
oldstates=[True]*32

def changed(channel):
newstate = GPIO.input(channel)
change = oldstates[channel] and not newstate
oldstates[channel] = newstate
return change

while True:
if changed(23):
os.system('mpg321 -g 95 a.mp3')
if changed(24):
os.system('mpg321 -g 95 b.mp3')
if changed(25):
os.system('mpg321 -g 95 c.mp3')
sleep(1.1);___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor