Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sensor_value = 256
- actuator_value = translate(sensor_value, 1, 512, 5, 10)
- def translate(value, leftMin, leftMax, rightMin, rightMax):
- # Figure out how 'wide' each range is
- leftSpan = leftMax - leftMin
- rightSpan = rightMax - rightMin
- # Convert the left range into a 0-1 range (float)
- valueScaled = float(value - leftMin) / float(leftSpan)
- # Convert the 0-1 range into a value in the right range.
- return rightMin + (valueScaled * rightSpan)
- >>> from scipy.interpolate import interp1d
- >>> m = interp1d([1,512],[5,10])
- >>> m(256)
- array(7.4951076320939336)
- >>> float(m(256))
- 7.4951076320939336
- >>> m([100,200,300])
- array([ 5.96868885, 6.94716243, 7.92563601])
- >>> m = interp1d([1,128,256,512],[1,10,90,100])
- >>> float(m(400))
- 95.625
- >>> from numpy import interp
- >>> interp(256,[1,512],[5,10])
- 7.4951076320939336
- def make_interpolater(left_min, left_max, right_min, right_max):
- # Figure out how 'wide' each range is
- leftSpan = left_max - left_min
- rightSpan = right_max - right_min
- # Compute the scale factor between left and right values
- scaleFactor = float(rightSpan) / float(leftSpan)
- # create interpolation function using pre-calculated scaleFactor
- def interp_fn(value):
- return right_min + (value-left_min)*scaleFactor
- return interp_fn
- # create function for doing interpolation of the desired
- # ranges
- scaler = make_interpolater(1, 512, 5, 10)
- # receive list of raw values from sensor, assign to data_list
- # now convert to scaled values using map
- scaled_data = map(scaler, data_list)
- # or a list comprehension, if you prefer
- scaled_data = [scaler(x) for x in data_list]
- def translate(sensor_val, in_from, in_to, out_from, out_to):
- out_range = out_to - out_from
- in_range = in_to - in_from
- in_val = sensor_val - in_from
- val=(float(in_val)/in_range)*out_range
- out_val = out_from+val
- return out_val
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement