Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Created on Wed Aug 16 19:30:09 2017
- @author: rlc
- """
- import sys
- import ctypes
- import time
- import pyqtgraph as pg
- import threading
- import serial
- from collections import deque
- from PyQt5.QtCore import *
- from PyQt5.QtGui import *
- __version__ = '1.0'
- class VentanaPrincipal(QMainWindow):
- newdata = pyqtSignal(object)
- def __init__(self, filename=None, parent=None):
- super(VentanaPrincipal, self).__init__(parent)
- length = 400
- self.ColaEntradaX = deque([1.]*length)
- self.ColaEntradaY = deque([1.]*length)
- self.ColaEntradaZ = deque([1.]*length)
- self.ColaTiempos = deque([0.]*length)
- self.Conectado = False
- self.Puerto = 'COM6'
- self.baud = 115200
- QTimer.singleShot(0, self.IniciarHilo)
- self.cwidget = QWidget()
- vb = QVBoxLayout()
- p = pg.PlotWidget()
- vb.addWidget(p)
- p2 = pg.PlotWidget()
- vb.addWidget(p2)
- p3 = pg.PlotWidget()
- vb.addWidget(p3)
- self.cwidget.setLayout(vb)
- self.setCentralWidget(self.cwidget)
- self.curve = p.plot(pen=(255,0,0))
- self.curve3 = p3.plot(pen=(0,0,255))
- self.curve2 = p2.plot(pen=(0,255,0))
- self.curve.setData(self.ColaEntradaX, self.ColaEntradaX)
- self.curve3.setData(self.ColaEntradaZ, self.ColaEntradaZ)
- self.curve2.setData(self.ColaEntradaY, self.ColaEntradaY)
- self.newdata.connect(self.onNewData)
- def onNewData(self, signal):
- if self.ColaTiempos[0] != 0:
- self.curve.setData(self.ColaTiempos, signal[0])
- self.curve2.setData(self.ColaTiempos, signal[1])
- self.curve3.setData(self.ColaTiempos, signal[2])
- else:
- self.curve.setData(signal[0])
- self.curve2.setData(signal[1])
- self.curve3.setData(signal[2])
- def IniciarHilo(self):
- print('Start lisnening to the COM-Puerto')
- serial_Puerto = serial.Serial(self.Puerto, self.baud, timeout=0)
- thread = threading.Thread(target=self.LeerArduino, args=(serial_Puerto,))
- thread.setDaemon(True) #Makes sures that the threas stops when exitting the program
- thread.start()
- self.tstart = time.clock()
- def DetenerHilo(self):
- print('Stop the thread...')
- def ManejadorDatos(self,data):
- listadatos= data.split("\r\n")
- for i, val in enumerate(listadatos):
- if "|" in listadatos[i] and "$" in listadatos[i] and "#" in listadatos[i] and "!" in listadatos[i]:
- datoRevisado = listadatos[i]
- datoRevisado= datoRevisado.replace("!","")
- datoRevisado=datoRevisado.replace("#","")
- datoRevisado=datoRevisado.replace("$","|")
- X,Y,Z=datoRevisado.split("|")
- try:
- X = float(X)
- except ValueError:
- X = 0.
- try:
- Y = float(Y)
- except ValueError:
- Y = 0.
- try:
- Z = float(Z)
- except ValueError:
- Z = 0.
- self.ColaEntradaX.append(X)
- self.ColaEntradaY.append(Y)
- self.ColaEntradaZ.append(Z)
- t = time.clock()
- dt = t-self.tstart
- self.ColaTiempos.append(dt)
- fullsignal = [self.ColaEntradaX,self.ColaEntradaY,self.ColaEntradaZ]
- self.newdata.emit(fullsignal)
- else:
- pass
- def LeerArduino(self,ser):
- reading=""
- while True:
- bytesToRead = ser.inWaiting()
- reading = ser.read(bytesToRead).decode('utf-8','ignore')
- if len(reading) > 1:
- self.ManejadorDatos(reading)
- def closeEvent(self, event):
- if self.okToContinue():
- event.accept()
- self.DetenerHilo()
- else:
- event.ignore()
- def okToContinue(self):
- return True
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- form = VentanaPrincipal()
- form.show()
- app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement