You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
8 years ago
|
#!/usr/bin/env python
|
||
|
import OSC
|
||
|
import multiprocessing, time
|
||
|
import RPi.GPIO as GPIO
|
||
|
import time
|
||
|
|
||
|
GPIO.setmode(GPIO.BCM)
|
||
|
GPIO.setwarnings(False)
|
||
|
|
||
|
pin_pairs = [[14,15], [23,24], [1,7]]
|
||
|
|
||
|
|
||
|
# OSC
|
||
|
client = OSC.OSCClient()
|
||
|
address = '127.0.0.1', 3000 # 57120==SC
|
||
|
client.connect( address ) # set the address for all following messages
|
||
|
oscOne = OSC.OSCMessage() # OSCresponder name: '/touch_one'
|
||
|
oscTwo = OSC.OSCMessage() # OSCresponder name: '/touch_two'
|
||
|
oscThree = OSC.OSCMessage() # OSCresponder name: '/touch_three'
|
||
|
oscOne.setAddress("/touch_one")
|
||
|
oscTwo.setAddress("/touch_two")
|
||
|
oscThree.setAddress("/touch_three")
|
||
|
print client
|
||
|
|
||
|
def osc_msg(pinpair, val):
|
||
|
pinindex = pin_pairs.index(pinpair)
|
||
|
|
||
|
if pinindex == 0:
|
||
|
oscOne.append( val )
|
||
|
print oscOne
|
||
|
client.send(oscOne)
|
||
|
oscOne.clearData()
|
||
|
elif pinindex == 1:
|
||
|
oscTwo.append( val )
|
||
|
print oscTwo
|
||
|
client.send(oscTwo)
|
||
|
oscTwo.clearData()
|
||
|
elif pinindex == 2:
|
||
|
oscThree.append( val )
|
||
|
print oscThree
|
||
|
client.send(oscThree)
|
||
|
oscThree.clearData()
|
||
|
|
||
|
|
||
|
def discharge(a_pin, b_pin):
|
||
|
GPIO.setup(a_pin, GPIO.IN)
|
||
|
GPIO.setup(b_pin, GPIO.OUT)
|
||
|
GPIO.output(b_pin, False)
|
||
|
time.sleep(0.005)
|
||
|
|
||
|
def charge_time(a_pin, b_pin):
|
||
|
GPIO.setup(b_pin, GPIO.IN)
|
||
|
GPIO.setup(a_pin, GPIO.OUT)
|
||
|
count = 0
|
||
|
GPIO.output(a_pin, True)
|
||
|
while not GPIO.input(b_pin):
|
||
|
count = count + 1
|
||
|
return count
|
||
|
|
||
|
def analog_read(pin_pair):
|
||
|
discharge(pin_pair[0],pin_pair[1])
|
||
|
return charge_time(pin_pair[0],pin_pair[1])
|
||
|
|
||
|
|
||
|
def worker(pair):
|
||
|
"""thread worker function"""
|
||
|
while True:
|
||
|
reading = analog_read( pair ) #print(analog_read())
|
||
|
osc_msg(pair, reading)
|
||
|
time.sleep(0.1)
|
||
|
|
||
|
return
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
jobs = []
|
||
|
for i in range(len(pin_pairs)):
|
||
|
p = multiprocessing.Process(target=worker, args=(pin_pairs[i],))
|
||
|
jobs.append(p)
|
||
|
p.start()
|