class EngineControlWidget(QtGui.QWidget): def __init__(self, serial=None, engine_nr=Engines.EngineLeft): super(EngineControlWidget, self).__init__() self.serial_connection = serial self.engine_nr = engine_nr self.minValue = 0 self.maxValue = 100 self.createUi() def createUi(self): palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Foreground, QtGui.QColor(111, 88, 100)) layout = QtGui.QHBoxLayout() layout.setMargin(2) layout.addSpacing(5) lCurrentVelocity = QtGui.QLabel("<b>Current Value</b>") layout.addWidget(lCurrentVelocity) layout.addSpacing(5) self.currentVelocity = QtGui.QLCDNumber() self.currentVelocity.setMaximumHeight(25) self.currentVelocity.setPalette(palette) self.currentVelocity.setSegmentStyle(QtGui.QLCDNumber.Filled) layout.addWidget(self.currentVelocity) layout.addSpacing(30) lSetpoint = QtGui.QLabel("<b>Setpoint</b>") layout.addWidget(lSetpoint) layout.addSpacing(5) self.positionBar = PositionBar() self.positionBar.setMinimumWidth(200) self.positionBar.setMinimumHeight(15) self.positionBar.setMaximumHeight(30) self.positionBar.setValue(0) self.positionBar.setBarColor(QtGui.QColor(0,0,255)) self.positionBar.valueChanged.connect(self.positionBarValueChanged) layout.addWidget(self.positionBar) #layout.addSpacing(5) self.leServoPosition = QtGui.QLineEdit() self.leServoPosition.setMaximumWidth(50) layout.addWidget(self.leServoPosition) layout.addSpacing(30) self.bStartEngine = QtGui.QPushButton("Start") self.bStartEngine.clicked.connect(self.startEngine) layout.addWidget(self.bStartEngine) layout.addStretch() self.setLayout(layout) def startEngine(self): try: position = self.leServoPosition.displayText() except: return if not self.checkValue(float(position)): return self.positionBar.setValue(int(position)) self.actualPositionServo.display(position) print "Position: " + position #command = CommandMessage(CommandType.SETSERVOPOS) #command.addArgument(str(1)) #command.addArgument(str(position)) #self.serial_connection.writeCommand(command) def setMinValue(self, value): self.minValue = value def setMaxValue(self, value): self.maxValue = value def checkValue(self, value): if value < self.minValue or value > self.maxValue: return False else: return True def positionBarValueChanged(self, value): self.leServoPosition.setText(str(value))
class ServoControlWidget(QtGui.QWidget): def __init__(self, controller=None, servo_nr=1): super(ServoControlWidget, self).__init__() if controller is None: raise Exception self.controller = controller self.servo_nr = servo_nr self.minValue = 0 self.maxValue = 180 self.createUi() def createUi(self): palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Foreground, QtGui.QColor(111, 88, 100)) layout = QtGui.QHBoxLayout() layout.setMargin(2) layout.addSpacing(5) lActualPosition = QtGui.QLabel("<b>Current Value</b>") layout.addWidget(lActualPosition) layout.addSpacing(5) self.actualPositionServo = QtGui.QLCDNumber() self.actualPositionServo.setMaximumHeight(25) self.actualPositionServo.setPalette(palette) self.actualPositionServo.setSegmentStyle(QtGui.QLCDNumber.Filled) layout.addWidget(self.actualPositionServo) layout.addSpacing(30) lMove1 = QtGui.QLabel("<b>Setpoint</b>") layout.addWidget(lMove1) layout.addSpacing(5) self.positionBar = PositionBar() self.positionBar.setMinimumWidth(200) self.positionBar.setMinimumHeight(15) self.positionBar.setMaximumHeight(30) self.positionBar.setValue(0) self.positionBar.setBarColor(QtGui.QColor(0,0,255)) self.positionBar.valueChanged.connect(self.positionBarValueChanged) layout.addWidget(self.positionBar) #layout.addSpacing(50) self.leServoPosition = QtGui.QLineEdit() self.leServoPosition.setMaximumWidth(50) layout.addWidget(self.leServoPosition) layout.addSpacing(30) self.startServo = QtGui.QPushButton("Move") self.startServo.clicked.connect(self.startServoClicked) layout.addWidget(self.startServo) layout.addStretch() self.setLayout(layout) def runMoveServo(self, position): if not self.checkValue(float(position)): return #command = SetServoPosCommand(self.servo_nr, position) #self.controller.writeCommand(command) self.controller.setServoPos(self.servo_nr, position) def setMinValue(self, value): self.minValue = value def setMaxValue(self, value): self.maxValue = value def checkValue(self, value): if value < self.minValue or value > self.maxValue: return False else: return True def startServoClicked(self): try: position = self.leServoPosition.displayText() except: return if not self.checkValue(float(position)): return self.positionBar.setValue(int(position)) #self.actualPositionServo.display(position) self.runMoveServo(int(position)) def positionBarValueChanged(self, value): self.leServoPosition.setText(str(value)) self.runMoveServo(value) def updateServoPosition(self, pos): if not pos: return self.actualPositionServo.display(int(pos))