def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        #para crear los beeps en linux
        #open('/dev/dsp','w').write(''.join(chr(128 * (1 + math.sin(math.pi * 440 * i / 100.0))) for i in xrange(1000)))

        #self.ptoSerial = serial.Serial('/dev/ttyUSB0',  9600,  timeout = 1)
        self.ptoSerial = serial.Serial('COM3',  115200,  timeout = 1)
        self.timer = QtCore.QTimer()       
        self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.timerEvent)

        #se llama a la funcion que dibuja el dial incluida en el archivo clases
        self.ind = clases.AttitudeIndicator(self)
        
        #se modifican las propiedades
        #si es readonly no acepta el mouse ni el keypress
        self.ind.setReadOnly(True)
        self.ind.scaleDraw().setPenWidth(3)
        self.ind.setLineWidth(4)
        self.ind.setFrameShadow(Qwt.QwtDial.Sunken)
        #se dibuja el dial en el widget
        self.ui.vlDial.addWidget(self.ind)
               
        #el gradient lo que hace es indicar el nivel de "cielo" si es uno es que la punta esta hasta arriba
        #si es -1 es que la punta apunta totalmenta hacia tierra
        self.ind.setGradient(0)
        self.ind.setAngle(50)
        self.timer.start(10)
        self.x = 0
        self.y = 0
        self.z = 0
class testAnalogDial(QtGui.QMainWindow):
    
   
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        #para crear los beeps en linux
        #open('/dev/dsp','w').write(''.join(chr(128 * (1 + math.sin(math.pi * 440 * i / 100.0))) for i in xrange(1000)))

        #self.ptoSerial = serial.Serial('/dev/ttyUSB0',  9600,  timeout = 1)
        self.ptoSerial = serial.Serial('COM3',  115200,  timeout = 1)
        self.timer = QtCore.QTimer()       
        self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.timerEvent)

        #se llama a la funcion que dibuja el dial incluida en el archivo clases
        self.ind = clases.AttitudeIndicator(self)
        
        #se modifican las propiedades
        #si es readonly no acepta el mouse ni el keypress
        self.ind.setReadOnly(True)
        self.ind.scaleDraw().setPenWidth(3)
        self.ind.setLineWidth(4)
        self.ind.setFrameShadow(Qwt.QwtDial.Sunken)
        #se dibuja el dial en el widget
        self.ui.vlDial.addWidget(self.ind)
               
        #el gradient lo que hace es indicar el nivel de "cielo" si es uno es que la punta esta hasta arriba
        #si es -1 es que la punta apunta totalmenta hacia tierra
        self.ind.setGradient(0)
        self.ind.setAngle(50)
        self.timer.start(10)
        self.x = 0
        self.y = 0
        self.z = 0
            
    
    def timerEvent(self):
        angX, gradY, freeFall = self.decodeData() 
        self.ind.setAngle(angX)
        self.ind.setGradient(gradY)
        if freeFall == True:
            self.ui.lblImg.setPixmap(QtGui.QPixmap(":/img/imagenes/circle_red.png"))
            #beeps
            #winsound.Beep(1000, 50)
            #winsound.Beep(1000, 50)
            #winsound.Beep(1000, 50)
            #open('/dev/dsp','w').write(''.join(chr(128 * (1 + math.sin(math.pi * 440 * i / 100.0))) for i in xrange(1000)))
            #open('/dev/dsp','w').write(''.join(chr(128 * (1 + math.sin(math.pi * 440 * i / 100.0))) for i in xrange(1000)))
            #open('/dev/dsp','w').write(''.join(chr(128 * (1 + math.sin(math.pi * 440 * i / 100.0))) for i in xrange(1000)))
            
        else:    
            self.ui.lblImg.setPixmap(QtGui.QPixmap(":/img/imagenes/circle_grey.png"))
        
    def decodeData(self):
        data = self.ptoSerial.readline()
        print "Data:", data
        #data = data.split(",")
        #print "data[2]:", data[2]
       
        words = data.split(",")    # Fields split
        print "words:", words
        if len(words) > 2:
            try:
                self.x = float(words[0])
                self.y = float(words[1])
                self.z = float(words[2])
            except:
                print "Invalid line"
        #print "X:", self.x
        #print "Y:", self.y
        #print "Z:", self.z
        #el minimo es 71 y el maximo es 195 . 195-71 = 123. 123 / 180 grados = 1.463  por grado
        #en reposo esta en 143 pero debe de estar en 123, el problema es que esta mal soldado, no estan los pines a 90 grados
        self.x = self.x - 20
        angX = (1.463 * self.x) -180
        
        #par y aproximadamente el minimo es de 65 y el maximo es de 191. 191-65 = 126. va de -1.00 a 1.00.
        #65 *1.587  aprox 103 minimo equivale al  -1.00 (hacia el cielo)
        #191 * 1.587 aprox 303 maximo equivale al 1.00 (hacia la tierra)
        #diferencia entre 303-103 es igual a 200
        #para que la punta cuando suba apunte al cielo
        gradY = ((1.587 * self.y) - 200) / 100

        #el eje z es el detector de freefall si es mayor a 200 entonces esta en caida libre
        if self.z < -160 :
            freeFall = True
        else:
            freeFall = False
        return angX, gradY,  freeFall