edubrm/software/modules/ModuleDebug.py
2011-05-08 21:58:40 +02:00

210 lines
7.6 KiB
Python

from PyQt4.QtGui import QWidget
from PyQt4.QtGui import QGraphicsScene
from PyQt4.QtGui import QPainterPath
from PyQt4.QtGui import QPen
from PyQt4.QtGui import QColor
from PyQt4.QtCore import pyqtSlot
from PyQt4.QtCore import SIGNAL
from PyQt4.QtCore import QObject
from PyQt4.QtCore import QTimer
from ModuleDebugUi import Ui_ModuleDebug
from device import Device
from time import time
class ModuleDebugWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
self.ui = Ui_ModuleDebug()
self.ui.setupUi(self)
QObject.connect(self.ui.comboAMP1c, SIGNAL("currentIndexChanged(int)"), self.on_comboAMP1_changed)
QObject.connect(self.ui.comboAMP1g, SIGNAL("currentIndexChanged(int)"), self.on_comboAMP1_changed)
QObject.connect(self.ui.comboAMP2c, SIGNAL("currentIndexChanged(int)"), self.on_comboAMP2_changed)
QObject.connect(self.ui.comboAMP2g, SIGNAL("currentIndexChanged(int)"), self.on_comboAMP2_changed)
QObject.connect(self.ui.pushSwitch1, SIGNAL("clicked(bool)"), self.on_switches_changed)
QObject.connect(self.ui.pushSwitch2, SIGNAL("clicked(bool)"), self.on_switches_changed)
QObject.connect(self.ui.pushSwitch3, SIGNAL("clicked(bool)"), self.on_switches_changed)
QObject.connect(self.ui.pushSwitch4, SIGNAL("clicked(bool)"), self.on_switches_changed)
QObject.connect(self.ui.pushSwitch5, SIGNAL("clicked(bool)"), self.on_switches_changed)
QObject.connect(self.ui.pushSwitch6, SIGNAL("clicked(bool)"), self.on_switches_changed)
QObject.connect(self.ui.pushPin1, SIGNAL("clicked(bool)"), self.on_pins_changed)
QObject.connect(self.ui.pushPin2, SIGNAL("clicked(bool)"), self.on_pins_changed)
QObject.connect(self.ui.pushPin3, SIGNAL("clicked(bool)"), self.on_pins_changed)
self.log = None
self.timer = QTimer()
QObject.connect(self.timer, SIGNAL("timeout()"), self.read_inputs)
self.data1 = 100*[0.0]
self.data2 = 100*[0.0]
@pyqtSlot(int)
def on_dialPWM1_valueChanged(self, val):
self.dev.pwm(1, val)
@pyqtSlot(int)
def on_dialPWM2_valueChanged(self, val):
self.dev.pwm(2, val)
@pyqtSlot(int)
def on_dialAMP1_valueChanged(self, val):
self.dev.opamp(1, val)
@pyqtSlot(int)
def on_dialAMP2_valueChanged(self, val):
self.dev.opamp(2, val)
@pyqtSlot(bool)
def on_radioSine_clicked(self, checked):
self.dev.ddswave(0)
@pyqtSlot(bool)
def on_radioSquare_clicked(self, checked):
self.dev.ddswave(1)
@pyqtSlot(bool)
def on_radioSaw_clicked(self, checked):
self.dev.ddswave(2)
@pyqtSlot(bool)
def on_radioInvSaw_clicked(self, checked):
self.dev.ddswave(3)
@pyqtSlot(int)
def on_dialDDS_valueChanged(self, val):
self.dev.ddsfreq(val)
@pyqtSlot()
def on_comboAMP1_changed(self):
c = self.ui.comboAMP1c.currentIndex()
g = self.ui.comboAMP1g.currentIndex()
self.dev.opamp(1, c, g)
@pyqtSlot()
def on_comboAMP2_changed(self):
c = self.ui.comboAMP2c.currentIndex()
g = self.ui.comboAMP2g.currentIndex()
self.dev.opamp(2, c, g)
@pyqtSlot()
def on_switches_changed(self):
s = (self.ui.pushSwitch1.isChecked() and 1 or 0,
self.ui.pushSwitch2.isChecked() and 1 or 0,
self.ui.pushSwitch3.isChecked() and 1 or 0,
self.ui.pushSwitch4.isChecked() and 1 or 0,
self.ui.pushSwitch5.isChecked() and 1 or 0,
self.ui.pushSwitch6.isChecked() and 1 or 0)
self.dev.switches(s[0] + (s[1]<<1) + (s[2]<<2) + (s[3]<<3) + (s[4]<<4) + (s[5]<<5))
@pyqtSlot()
def on_pins_changed(self):
s = (self.ui.pushPin1.isChecked() and 1 or 0,
self.ui.pushPin2.isChecked() and 1 or 0,
self.ui.pushPin3.isChecked() and 1 or 0)
self.ui.pushOut1.setEnabled(not s[0])
self.ui.pushOut2.setEnabled(not s[1])
self.ui.pushOut3.setEnabled(not s[2])
self.dev.setpins(s[0] + (s[1]<<1) + (s[2]<<2))
@pyqtSlot(bool)
def on_pushOut1_clicked(self, checked):
self.dev.setout(1, checked and 1 or 0)
@pyqtSlot(bool)
def on_pushOut2_clicked(self, checked):
self.dev.setout(2, checked and 1 or 0)
@pyqtSlot(bool)
def on_pushOut3_clicked(self, checked):
self.dev.setout(3, checked and 1 or 0)
@pyqtSlot(int)
def on_dialInputFreq_valueChanged(self, val):
self.timer.stop()
self.ui.pushLog.setEnabled(val > 0)
if val > 0:
self.timer.start(1000.0/val)
else:
self.ui.labelAD0.setText('AD0: -')
self.ui.labelAD1.setText('AD1: -')
self.ui.labelAD2.setText('AD2: -')
self.ui.labelAD3.setText('AD3: -')
self.ui.labelAD4.setText('AD4: -')
self.ui.labelAD5.setText('AD5: -')
self.ui.labelAD6.setText('AD6: -')
self.ui.labelIO1.setText('IO1: -')
self.ui.labelIO2.setText('IO2: -')
self.ui.labelIO3.setText('IO3: -')
@pyqtSlot(bool)
def on_pushLog_clicked(self, checked):
if checked:
self.log = open('edubrm.log', 'w')
else:
self.log.close()
self.log = None
def read_inputs(self):
r = self.dev.read()
if self.log:
self.log.write('%0.6f;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d\n' % (time(), r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9]))
self.ui.labelAD0.setText('AD0: ' + str(r[0]))
self.ui.labelAD1.setText('AD1: ' + str(r[1]))
self.ui.labelAD2.setText('AD2: ' + str(r[2]))
self.ui.labelAD3.setText('AD3: ' + str(r[3]))
self.ui.labelAD4.setText('AD4: ' + str(r[4]))
self.ui.labelAD5.setText('AD5: ' + str(r[5]))
self.ui.labelAD6.setText('AD6: ' + str(r[6]))
self.ui.labelIO1.setText('IO1: ' + str(r[7]))
self.ui.labelIO2.setText('IO2: ' + str(r[8]))
self.ui.labelIO3.setText('IO3: ' + str(r[9]))
v1 = -1
if self.ui.comboChart1.currentIndex() > 0:
v1 = r[self.ui.comboChart1.currentIndex() - 1]
v2 = -1
if self.ui.comboChart2.currentIndex() > 0:
v2 = r[self.ui.comboChart2.currentIndex() - 1]
if v1 != -1 or v2 != -1:
self.chart(v1, v2)
def setup_scene(self, scene):
scene.addLine(-5, 0, 205, 0)
scene.addLine(-5, -512/6, 205, -512/6)
scene.addLine(-5, -1023/6, 205, -1023/6)
scene.addSimpleText('0').moveBy(-40, -10)
scene.addSimpleText('512').moveBy(-40, -512/6-10)
scene.addSimpleText('1023').moveBy(-40, -1023/6-10)
def chart(self, v1, v2):
self.data1.pop(0)
self.data2.pop(0)
self.data1.append(v1)
self.data2.append(v2)
self.scene1 = QGraphicsScene()
self.scene2 = QGraphicsScene()
self.setup_scene(self.scene1)
self.setup_scene(self.scene2)
path = QPainterPath()
path.moveTo(0,-self.data1[0]/6)
for i in xrange(1,100):
path.lineTo(2*(i+1), -self.data1[i]/6)
self.scene1.addPath(path, QPen(QColor(0,0,255), 3))
path = QPainterPath()
path.moveTo(0,-self.data2[0]/6)
for i in xrange(1,100):
path.lineTo(2*(i+1), -self.data2[i]/6)
self.scene2.addPath(path, QPen(QColor(0,0,255), 3))
self.ui.chart1.setScene(self.scene1)
self.ui.chart2.setScene(self.scene2)
class ModuleDebug():
def __init__(self):
self.title = 'Debug'
self.widget = ModuleDebugWidget()
def start(self):
self.widget.dev = Device()
def stop(self):
self.widget.timer.stop()