I am looking for some advice on python scripting into pure data. The plan is to receive an incoming voltage via the High-Precision AD/DA Board into the Raspberry Pi, then have that changing voltage modulate parameters within Pure Data via Python. I have bastardised code from both an example from the AD board to read voltage and a tutorial to send messages from Python to Pure Data which both work. My question is, how would I go about writing the python code to send the voltage readings from one channel of the AD board to manipulate in real time a fader in pure data? Here's the Python code I am currently working with:
import os
import sys
import time
import numpy as np
import itertools
from pipyadc.ADS1256_definitions import *
from pipyadc import ADS1256
import pipyadc.ADS1256_default_config as myconfig_2
def send2pd(message=''):
os.system("echo '" + message + "' | pdsend 3000")
def AudioOn():
message = '0 1;'
send2Pd(message)
def Start_Stop():
message = '2 1;'
send2Pd(message)
def Set_Fader():
message = '1 ' + str() + ';'
send2Pd(message)
send2pd('0 1;')
send2pd('2 1;')
POTI = POS_AIN0|NEG_AINCOM
LDR = POS_AIN1|NEG_AINCOM
EXT2, EXT3, EXT4 = POS_AIN2|NEG_AINCOM, POS_AIN3|NEG_AINCOM, POS_AIN4|NEG_AINCOM
EXT5, EXT6, EXT7 = POS_AIN5|NEG_AINCOM, POS_AIN6|NEG_AINCOM, POS_AIN7|NEG_AINCOM
POTI_INVERTED = POS_AINCOM|NEG_AIN0
SHORT_CIRCUIT = POS_AIN0|NEG_AIN0
CH_SEQUENCE = (POTI, LDR, EXT2, EXT3, EXT4, EXT7, POTI_INVERTED, SHORT_CIRCUIT)
CH_OFFSET = np.array((-10, 0, -85, 0, 750, 0, 0, 0), dtype=np.int)
GAIN_CAL = np.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=np.float)
FILTER_SIZE = 32
def do_measurement():
ads2 = ADS1256(myconfig_2)
ads2.drate = DRATE_30000
ads2.cal_self()
CH_GAIN = ads2.v_per_digit * GAIN_CAL
rows, columns = FILTER_SIZE, len(CH_SEQUENCE)
filter_buffer = np.zeros((rows, columns), dtype=np.int)
timestamp = time.time()
for data_row in itertools.cycle(filter_buffer):
ads2.read_sequence(CH_SEQUENCE, data_row)
elapsed = time.time() - timestamp
if elapsed > 1:
timestamp += 1
ch_unscaled = np.average(filter_buffer, axis=0) - CH_OFFSET
ch_volts = ch_unscaled * CH_GAIN
nice_output([int(i) for i in ch_unscaled], ch_volts)
def nice_output(digits, volts):
sys.stdout.write(
"\0337"
+
"""
These are the sample values converted to voltage in V for the channels:
Poti_CH0, LDR_CH1, AIN2, AIN3, AIN4, AIN7, Poti NEG, Short 0V
"""
+ ", ".join(["{: 8.0f}".format(i) for i in volts])
+ "\n\033[J\0338"
)
send2pd
('1 ' + str() + ';') #fader send
try:
print("\033[2J\033[H")
print(doc)
print("\nPress CTRL-C to exit.")
do_measurement()
except (KeyboardInterrupt):
print("\n"*8 + "User exit.\n")
send2pd('2 0;')
send2pd('0 0;')Any advice on how to do this or a better/simpler way of achieving this will be much appreciated Thanks.
Larz60+ write Mar-29-2021, 10:48 AM:
Please post all code, output and errors (it it's entirety) between their respective tags. Refer to BBCode help topic on how to post. Use the "Preview Post" button to make sure the code is presented as you expect before hitting the "Post Reply/Thread" button.
Fixed for you this time. Please use bbcode tags on future posts.
Please post all code, output and errors (it it's entirety) between their respective tags. Refer to BBCode help topic on how to post. Use the "Preview Post" button to make sure the code is presented as you expect before hitting the "Post Reply/Thread" button.
Fixed for you this time. Please use bbcode tags on future posts.
