Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # Imports
- import sys
- import usb
- from PyQt4 import QtCore, QtGui
- # Classes
- # AnalogMultimeter
- class AnalogMultimeter(QtGui.QWidget):
- needlePosition = 0
- needlePolygon = QtGui.QPolygon([QtCore.QPoint(4, -8), QtCore.QPoint(-4, -8), QtCore.QPoint(-1, 85), QtCore.QPoint(1, 85), ])
- needleColor = QtGui.QColor(63, 63, 63)
- bigTickColor = QtGui.QColor(0, 0, 0)
- smallTickColor = QtGui.QColor(127, 127, 127)
- def __init__(self, parent=None):
- super(AnalogMultimeter, self).__init__(parent)
- timer = QtCore.QTimer(self)
- timer.timeout.connect(self.update)
- timer.start(20)
- self.setWindowTitle("Analog Multimeter")
- self.resize(200, 120)
- def paintEvent(self, event):
- width = self.width()
- height = self.height()
- painter = QtGui.QPainter(self)
- painter.setRenderHint(QtGui.QPainter.Antialiasing)
- painter.translate(width / 2, height * 0.85)
- painter.scale(width / 200.0, height / 120.0)
- painter.setPen(AnalogMultimeter.bigTickColor)
- painter.rotate(200);
- for i in range(11):
- painter.drawLine(88, 0, 96, 0)
- painter.rotate(14)
- painter.setPen(AnalogMultimeter.smallTickColor)
- painter.rotate(206);
- for i in range(50):
- if (i % 5) != 0:
- painter.drawLine(92, 0, 96, 0)
- painter.rotate(2.8)
- painter.rotate(130 + self.needlePosition)
- painter.setPen(QtCore.Qt.NoPen)
- painter.setBrush(AnalogMultimeter.needleColor)
- painter.drawConvexPolygon(AnalogMultimeter.needlePolygon)
- def updatePosition(self, position):
- if position != self.needlePosition:
- self.needlePosition = position
- # Pinguino
- class Pinguino():
- VENDOR = 0x04D8
- PRODUCT = 0xFEAA
- CONFIGURATION = 3
- INTERFACE = 0
- ENDPOINT_IN = 0x82
- ENDPOINT_OUT = 0x01
- device = None
- handle = None
- def __init__(self,):
- for bus in usb.busses():
- for dev in bus.devices:
- if dev.idVendor == self.VENDOR and dev.idProduct == self.PRODUCT:
- self.device = dev
- return None
- def open(self):
- if not self.device:
- print >> sys.stderr, "Unable to find device!"
- return None
- try:
- self.handle = self.device.open()
- self.handle.setConfiguration(self.CONFIGURATION)
- self.handle.claimInterface(self.INTERFACE)
- except usb.USBError, err:
- print >> sys.stderr, err
- self.handle = None
- return self.handle
- def close(self):
- try:
- self.handle.releaseInterface()
- except Exception, err:
- print >> sys.stderr, err
- self.handle, self.device = None, None
- def read(self, length, timeout = 0):
- return self.handle.bulkRead(self.ENDPOINT_IN, length, timeout)
- def write(self, buffer, timeout = 0):
- return self.handle.bulkWrite(self.ENDPOINT_OUT, buffer, timeout)
- # Main methods
- def updateMeter():
- usb_in = ''
- try:
- usb_in = pinguino.read(2, 1);
- except usb.USBError as err:
- pass
- if len(usb_in) > 0:
- i = usb_in[0] * 256 + usb_in[1];
- j = i * (140.0 / 1023)
- meter.updatePosition(j)
- # Main
- app = QtGui.QApplication(sys.argv)
- meter = AnalogMultimeter()
- meter.show()
- pinguino = Pinguino()
- if pinguino.open() == None:
- print "Unable to open Pinguino device!"
- sys.exit()
- timer = QtCore.QTimer()
- timer.timeout.connect(updateMeter)
- timer.start(10)
- sys.exit(app.exec_())
- # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement