Source code for pitop.protoplus.adc

from pitopcommon.i2c_device import I2CDevice
from pitopcommon.bitwise_ops import split_into_bytes
from time import sleep


[docs]class ADCProbe(): __device_address = 0x2A __register_address = 0 __channel_count = 6 __adc_ratio = 20 def __init__(self, i2c_device_name="/dev/i2c-1"): self.__i2c_device_name = i2c_device_name self.__device = None self.__error_array = [-1] * self.__channel_count
[docs] def read_value(self, channel): if ((channel < 0) or (channel > self.__channel_count)): print("Invalid channel - use 0 to " + str(self.__channel_count - 1)) return -1 results = self.read_all() return results[channel]
[docs] def read_all(self): if (self.__connect() is False): print("Could not connect to device") return self.__error_array results_reading = self.__device.read_n_unsigned_bytes(self.__register_address, number_of_bytes=self.__channel_count) results = split_into_bytes(results_reading, self.__channel_count, little_endian=False) data_read_len = len(results) self.__disconnect() if (data_read_len != self.__channel_count): print("Bad read from device. " f"Expected {str(self.__channel_count)} bytes, received {str(data_read_len)} bytes.") return self.__error_array for i in range(self.__channel_count): results[i] *= self.__adc_ratio results[i] = int(results[i]) return results
[docs] def poll(self, delay=0.5): print("| ADC0\t| ADC1\t| ADC2\t| ADC3\t| ADC4\t| ADC5\t|") print("-------------------------------------------------") while True: results = self.read_all() print("| " + str(results[0]) + "\t| " + str(results[1]) + "\t| " + str(results[2]) + "\t| " + str(results[3]) + "\t| " + str(results[4]) + "\t| " + str(results[5]) + "\t|") sleep(delay)
def __connect(self): try: self.__device = I2CDevice( self.__i2c_device_name, self.__device_address) self.__device.connect() except Exception as e: print("Unable to read from ADC over I2C: " + str(e)) return False return True def __disconnect(self): if (self.__device is not None): self.__device.disconnect()