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))
Exemple #2
0
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))