def __init__(self,parent=None): QtGui.QWidget.__init__(self,parent) self.timer = QtCore.QTimer() self.ui=Ui_CansatDlg() self.ui.setupUi(self) self.thread=DataGetter(self) self.altitudeData=[] self.airTempData=[] self.descentRateData=[] self.voltageData=[] self.data=[] self.data.append(self.altitudeData) self.data.append(self.airTempData) self.data.append(self.descentRateData) self.data.append(self.voltageData) self.timeData=[] self.initialTime=0.0 self.mplWidgets=[self.ui.altitudeMpl, self.ui.airTempMpl, self.ui.descentRateMpl, self.ui.voltageMpl] self.plot=[] self._initializePlot() self._connectSlots() self._fillPortsList() self.counter=0 self.plotLocation=[4,3,12,2] self.latestLine=[] self.dataExists=False self.ui.disconnectButton.setEnabled(False) self.ui.startButton.setEnabled(False) self.ui.stopButton.setEnabled(False)
class MainDisplay(QtGui.QMainWindow): def __init__(self,parent=None): QtGui.QWidget.__init__(self,parent) self.timer = QtCore.QTimer() self.ui=Ui_CansatDlg() self.ui.setupUi(self) self.thread=DataGetter(self) self.altitudeData=[] self.airTempData=[] self.descentRateData=[] self.voltageData=[] self.data=[] self.data.append(self.altitudeData) self.data.append(self.airTempData) self.data.append(self.descentRateData) self.data.append(self.voltageData) self.timeData=[] self.initialTime=0.0 self.mplWidgets=[self.ui.altitudeMpl, self.ui.airTempMpl, self.ui.descentRateMpl, self.ui.voltageMpl] self.plot=[] self._initializePlot() self._connectSlots() self._fillPortsList() self.counter=0 self.plotLocation=[4,3,12,2] self.latestLine=[] self.dataExists=False self.ui.disconnectButton.setEnabled(False) self.ui.startButton.setEnabled(False) self.ui.stopButton.setEnabled(False) def _fillPortsList(self): for portname in enumerate_serial_ports(): self.ui.serialPortCombo.addItem(portname) def _initializePlot(self): xlabel='Time (sec.)' ylabel=[r'Altitude ($m.$)', r'Air Temperature ($C^\circ$)', r'Descent Rate ($m/s^2$)', r'Battery Voltage ($V$)'] for i in range(len(self.mplWidgets)): self.plot.append(self.mplWidgets[i].axes.plot( self.data[i], linewidth=1, color=(0, 0, 0), )[0]) self.mplWidgets[i].axes.set_xlabel(xlabel, size=8) self.mplWidgets[i].axes.set_ylabel(ylabel[i], size=8) self.mplWidgets[i].figure.subplots_adjust(bottom=.15) self.mplWidgets[i].figure.subplots_adjust(left=.15) def _drawPlot(self): if self.dataExists: for i in range(len(self.mplWidgets)): xmax = max(self.timeData) if max(self.timeData) > 20 else 20 xmin = 0 ymin = round(min(self.data[i]), 0) - 1 ymax = round(max(self.data[i]), 0) + 1 self.mplWidgets[i].axes.set_xbound(lower=xmin, upper=xmax) self.mplWidgets[i].axes.set_ybound(lower=ymin, upper=ymax) self.plot[i].set_data(np.array(self.timeData),np.array(self.data[i])) self.mplWidgets[i].draw() self._updateLatestData(self.latestLine) def _updateLatestData(self,line): self.ui.timeEdit.setText(line[9]) self.ui.latitudeEdit.setText(line[5]) self.ui.longitudeEdit.setText(line[7]) self.ui.seaAltitudeEdit.setText(line[11]) self.ui.numSatEdit.setText(line[10]) self.ui.altitudePressureEdit.setText(line[4]) self.ui.descentRateEdit.setText(line[12]) self.ui.airTempEdit.setText(line[3]) self.ui.voltageEdit.setText(line[2]) self.ui.servo1Edit.setText(line[0]) self.ui.servo2Edit.setText(line[1]) def _connectSlots(self): self.connect(self.ui.connectButton,QtCore.SIGNAL("clicked()"),self._slotConnectClicked) self.connect(self.ui.disconnectButton,QtCore.SIGNAL("clicked()"),self._slotDisconnectClicked) self.connect(self.ui.refreshButton,QtCore.SIGNAL("clicked()"),self._slotRefreshClicked) self.connect(self.ui.startButton,QtCore.SIGNAL("clicked()"),self._slotStartClicked) self.connect(self.ui.stopButton,QtCore.SIGNAL("clicked()"),self._slotStopClicked) self.connect(self.timer, QtCore.SIGNAL('timeout()'), self._drawPlot) def _slotConnectClicked(self): if not str(self.ui.serialPortCombo.currentText()) == '': self.ui.disconnectButton.setEnabled(True) self.ui.connectButton.setEnabled(False) self.ui.startButton.setEnabled(True) self.ui.stopButton.setEnabled(True) self.ui.refreshButton.setEnabled(False) self.ui.serialPortCombo.setEnabled(False) self.ui.baudEdit.setEnabled(False) for i in range(4): self.data[i][:]=[] self.timeData[:]=[] self.counter=0 self.dataExists=False port=str(self.ui.serialPortCombo.currentText()) baud=self.ui.baudEdit.text() self.thread._setConnection(port,baud) self.thread.start() self.timer.start(500) else: print 'No COM port connected' def _slotDisconnectClicked(self): self.ui.disconnectButton.setEnabled(False) self.ui.connectButton.setEnabled(True) self.ui.startButton.setEnabled(False) self.ui.stopButton.setEnabled(False) self.ui.refreshButton.setEnabled(True) self.ui.serialPortCombo.setEnabled(True) self.ui.baudEdit.setEnabled(True) self.thread._disconnect() self.timer.stop() def _slotRefreshClicked(self): self.ui.serialPortCombo.clear() self._fillPortsList() def _slotStartClicked(self): self.thread._sendStart() def _slotStopClicked(self): self.thread._sendEnd()