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

#!/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()