Advertisement
Guest User

Marin Purgar

a guest
Mar 16th, 2010
622
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.34 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. # Imports
  4.  
  5. import sys
  6. import usb
  7.  
  8. from PyQt4 import QtCore, QtGui
  9.  
  10. # Classes
  11.  
  12. # AnalogMultimeter
  13.  
  14. class AnalogMultimeter(QtGui.QWidget):
  15.   needlePosition = 0
  16.   needlePolygon = QtGui.QPolygon([QtCore.QPoint(4, -8), QtCore.QPoint(-4, -8), QtCore.QPoint(-1, 85), QtCore.QPoint(1, 85), ])
  17.   needleColor = QtGui.QColor(63, 63, 63)
  18.   bigTickColor = QtGui.QColor(0, 0, 0)
  19.   smallTickColor = QtGui.QColor(127, 127, 127)
  20.  
  21.   def __init__(self, parent=None):
  22.     super(AnalogMultimeter, self).__init__(parent)
  23.     timer = QtCore.QTimer(self)
  24.     timer.timeout.connect(self.update)
  25.     timer.start(20)
  26.     self.setWindowTitle("Analog Multimeter")
  27.     self.resize(200, 120)
  28.  
  29.   def paintEvent(self, event):
  30.     width = self.width()
  31.     height = self.height()
  32.     painter = QtGui.QPainter(self)
  33.     painter.setRenderHint(QtGui.QPainter.Antialiasing)
  34.     painter.translate(width / 2, height * 0.85)
  35.     painter.scale(width / 200.0, height / 120.0)
  36.     painter.setPen(AnalogMultimeter.bigTickColor)
  37.     painter.rotate(200);
  38.     for i in range(11):
  39.       painter.drawLine(88, 0, 96, 0)
  40.       painter.rotate(14)
  41.     painter.setPen(AnalogMultimeter.smallTickColor)
  42.     painter.rotate(206);
  43.     for i in range(50):
  44.       if (i % 5) != 0:
  45.         painter.drawLine(92, 0, 96, 0)
  46.       painter.rotate(2.8)
  47.     painter.rotate(130 + self.needlePosition)
  48.     painter.setPen(QtCore.Qt.NoPen)
  49.     painter.setBrush(AnalogMultimeter.needleColor)
  50.     painter.drawConvexPolygon(AnalogMultimeter.needlePolygon)
  51.  
  52.   def updatePosition(self, position):
  53.     if position != self.needlePosition:
  54.       self.needlePosition = position
  55.  
  56. # Pinguino
  57.  
  58. class Pinguino():
  59.   VENDOR = 0x04D8
  60.   PRODUCT = 0xFEAA
  61.   CONFIGURATION = 3
  62.   INTERFACE = 0
  63.   ENDPOINT_IN = 0x82
  64.   ENDPOINT_OUT = 0x01
  65.  
  66.   device = None
  67.   handle = None
  68.  
  69.   def __init__(self,):
  70.     for bus in usb.busses():
  71.       for dev in bus.devices:
  72.         if dev.idVendor == self.VENDOR and dev.idProduct == self.PRODUCT:
  73.           self.device = dev
  74.     return None
  75.  
  76.   def open(self):
  77.     if not self.device:
  78.       print >> sys.stderr, "Unable to find device!"
  79.       return None
  80.     try:
  81.       self.handle = self.device.open()
  82.       self.handle.setConfiguration(self.CONFIGURATION)
  83.       self.handle.claimInterface(self.INTERFACE)
  84.     except usb.USBError, err:
  85.       print >> sys.stderr, err
  86.       self.handle = None
  87.     return self.handle
  88.  
  89.   def close(self):
  90.     try:
  91.       self.handle.releaseInterface()
  92.     except Exception, err:
  93.       print >> sys.stderr, err
  94.     self.handle, self.device = None, None
  95.  
  96.   def read(self, length, timeout = 0):
  97.     return self.handle.bulkRead(self.ENDPOINT_IN, length, timeout)
  98.  
  99.   def write(self, buffer, timeout = 0):
  100.     return self.handle.bulkWrite(self.ENDPOINT_OUT, buffer, timeout)
  101.  
  102. # Main methods
  103.  
  104. def updateMeter():
  105.   usb_in = ''
  106.   try:
  107.     usb_in = pinguino.read(2, 1);
  108.   except usb.USBError as err:
  109.     pass
  110.   if len(usb_in) > 0:
  111.     i = usb_in[0] * 256 + usb_in[1];
  112.     j = i * (140.0 / 1023)
  113.     meter.updatePosition(j)
  114.  
  115. # Main
  116.  
  117. app = QtGui.QApplication(sys.argv)
  118.  
  119. meter = AnalogMultimeter()
  120. meter.show()
  121.  
  122. pinguino = Pinguino()
  123.  
  124. if pinguino.open() == None:
  125.   print "Unable to open Pinguino device!"
  126.   sys.exit()
  127.  
  128. timer = QtCore.QTimer()
  129. timer.timeout.connect(updateMeter)
  130. timer.start(10)
  131.  
  132. sys.exit(app.exec_())
  133.  
  134. # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement