diff --git a/software/DataAcquisition/IonizationChamber.py b/software/DataAcquisition/IonizationChamber.py new file mode 100644 index 0000000..191982c --- /dev/null +++ b/software/DataAcquisition/IonizationChamber.py @@ -0,0 +1,19 @@ +from serial import Serial +import mcp3425 + +class IonizationChamber: + def __init__(self, config): + self.config = config + self.openSerialPort() + + def openSerialPort(self): + self.serialPort = Serial(self.config.myDeviceId, baudrate = self.config.myBaudrate, timeout=None) + self.serialPort.isOpen() + self.serialPort.flushInput() + + def acquireFromDevice(self): + dataIn = self.serialPort.read(5) + (msb, lsb) = (dataIn[2], dataIn[3]) + deviceMeasurement = mcp3425.convert(msb, lsb, mcp3425.MCP3425_RESOLUTION.R14) + return deviceMeasurement + diff --git a/software/DataAcquisition/main.py b/software/DataAcquisition/main.py index d05179c..f8e656a 100644 --- a/software/DataAcquisition/main.py +++ b/software/DataAcquisition/main.py @@ -1,23 +1,43 @@ -from serial import Serial import datetime -import mcp3425 + +from IonizationChamber import IonizationChamber import config -ser = Serial(config.myDeviceId, baudrate = config.myBaudrate, timeout=None) +class IonizationChamberStateMachine: + def __init__(self, config): + self.config = config + self.chamber = IonizationChamber(config) + self.nextState = self.initIonizationChamber -ser.isOpen() -logFile = open('data.csv', 'w') -logFile.write("Time,Counter\n") -ser.flushInput() + def tick(self): + self.nextState() -while True: - dataIn = ser.read(5) - (msb, lsb) = (dataIn[2], dataIn[3]) - voltage = mcp3425.convert(msb, lsb, mcp3425.MCP3425_RESOLUTION.R14) - now = datetime.datetime.now() + def initIonizationChamber(self): + self.chamber.openSerialPort() + self.nextState = self.initOutputFile - logFile.write("{0},{1}\n".format(now, voltage)) - logFile.flush() + def initOutputFile(self): + self.logFile = open('data.csv', 'w') + self.logFile.write("Time,Counter\n") + self.nextState = self.getMeasurementFromIonizationChamber - print(voltage) + def getMeasurementFromIonizationChamber(self): + self.deviceMeasurement = self.chamber.acquireFromDevice() + self.nextState = self.saveMeasurement + def saveMeasurement(self): + now = datetime.datetime.now() + self.logFile.write("{0},{1}\n".format(now, self.deviceMeasurement)) + self.logFile.flush() + self.nextState = self.showMeasurementToUser + + def showMeasurementToUser(self): + print(self.deviceMeasurement) + self.nextState = self.getMeasurementFromIonizationChamber + + +if __name__=="__main__": + machine = IonizationChamberStateMachine(config) + + while True: + machine.tick()