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.