SerialGraph.py 3.98 KB
Newer Older
1
from PyQt5 import QtGui, QtCore, QtWidgets       #importação de classes
2
3
import pyqtgraph as pg
import serial
Alisson Claudino's avatar
Alisson Claudino committed
4
import time
5
from CalibracaoP import Ui_MainWindow
Alisson Claudino's avatar
Alisson Claudino committed
6

7
ser = serial.Serial('/dev/ttyUSB0', 115200)  #Inicialização da Serial com baudrate 115200bps
Alisson Claudino's avatar
Alisson Claudino committed
8
9
10
11
12
ser.setDTR(False)                            #Reset do arduino para reinicio da leitura
time.sleep(0.022)
ser.setDTR(True)

ser.readline()                              #Primeiro valor da serial sai com lixo
13
14

app = QtGui.QApplication([])
15
16
17
18
pg.setConfigOption('foreground', 'c')
window=Ui_MainWindow()
dialog = QtWidgets.QMainWindow()
window.setupUi(dialog)
19
20
layout = pg.GraphicsLayout()
scene=QtGui.QGraphicsScene()
21
22
23

window.sceneSelector(scene)

24
25
scene.addItem(layout)
p1 = layout.addPlot()
26
27
28
29
30
31
p1.showGrid(True,True)
p1.addLegend()
curve1 = p1.plot(pen='r',name="Sensor 1")
curve2 = p1.plot(pen='g',name="Sensor 2")
curve3 = p1.plot(pen='w',name="Sensor 3")
curve4 = p1.plot(pen='y',name="Sensor 4")
32
33
34
35
36
curve5 = p1.plot(pen='b',name="Sensor 5")
curve6 = p1.plot(pen='m',name="Sensor 6")
curve7 = p1.plot(pen='c',name="Sensor 7")
curve8 = p1.plot(name="Sensor 8")

37
#window.CentralGraph.setFixedSize(690,550)
38
layout.setPreferredSize(900,550)
Alisson Claudino's avatar
Alisson Claudino committed
39
y1 = []                                     #Inicialização da lista dinâmica dos valores de y
40
41
42
y2 = []
y3 = []
y4 = []
43
44
45
46
y5 = []
y6 = []
y7 = []
y8 = []
Alisson Claudino's avatar
Alisson Claudino committed
47
x1 = []                                     #Inicialização da lista dinâmica dos valores de x
48
x_max = 200                                  #Variável que define o tamanho do eixo
Alisson Claudino's avatar
Alisson Claudino committed
49
indx = 0                                    #Variável auxiliar de contagem
50

51
p1.setYRange(0, 5, padding=0)              #Define os limites do gráfico
52
p1.setXRange(0, x_max, padding=0)
53
p1.setLabel("bottom","Tempo",'s')
54
55
p1.setLabel("left","Força",'Tonf')
p1.setLabel("right","Tensão no Calibrante",'V')
56
57
58

dialog.showMaximized()

59

60

Alisson Claudino's avatar
Alisson Claudino committed
61
62

def update():                               #Método para atualizar os arrays com valores de x, y e atualizar o gráfico
63
    global curve1,curve2, indx, y1, x1, ser #Dá acesso das variáveis globais à função
Alisson Claudino's avatar
Alisson Claudino committed
64
    while (ser.inWaiting() == 0):           #Aguarda a serial liberar dado
65
        pass
66
67
    readData = ser.readline()       #Lê o dado da serial
    readData=readData.decode('utf8')
68
69
    dado=readData.split(' ',8)
    print(dado[3])
70
71
72
73
    y1.append(float(dado[0])*5/32767)                     #Armazena o dado na lista do eixo y
    y2.append(float(dado[1])*5/32767)
    y3.append(float(dado[2])*5/32767)
    y4.append(float(dado[3])*5/32767)
74
75
76
77
    y5.append(float(dado[4])*5/32767)
    y6.append(float(dado[5])*5/32767)
    y7.append(float(dado[6])*5/32767)
    y8.append(float(dado[7])*5/32767)
78

Alisson Claudino's avatar
Alisson Claudino committed
79
80
81
    indx += 1                               #Adiciona um na variavel auxiliar
    if len(y1) > x_max-1:                   #Verifica se foi excedido o tamanho máximo do eixo x para o array
        del y1[0]                           #Caso sim, libera o valor da primeira posição para manter o array, e consequentemente o gráfico, com escala constante
82
83
84
        del y2[0]
        del y3[0]
        del y4[0]
85
86
87
88
        del y5[0]
        del y6[0]
        del y7[0]
        del y8[0]
Alisson Claudino's avatar
Alisson Claudino committed
89
        indx = x_max                        #impede indx de divergir
90
    else:
Alisson Claudino's avatar
Alisson Claudino committed
91
        x1.append(indx)                     #Vai adicionando valores de 0 a x_max no eixo x até que a lista x lote e tenha mesmo tamanho da lista y
92
93
    window.forcaLabel.setText(dado[0])
    window.calibranteLabel.setText(dado[1])
94
95
96
97
    curve1.setData(x1,y1)                   #Atualiza os dados da curva
    curve2.setData(x1,y2)
    curve3.setData(x1,y3)
    curve4.setData(x1,y4)
98
99
100
101
    curve5.setData(x1, y5)
    curve6.setData(x1, y6)
    curve7.setData(x1, y7)
    curve8.setData(x1, y8)
102

103
104

    #app.processEvents()                     #
105

Alisson Claudino's avatar
Alisson Claudino committed
106
107
108
timer = QtCore.QTimer()                     #
timer.timeout.connect(update)               #
timer.start(0)                              #
109
110


Alisson Claudino's avatar
Alisson Claudino committed
111
if __name__ == '__main__':                  #
112
    import sys
Alisson Claudino's avatar
Alisson Claudino committed
113
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_'):   #
114
        QtGui.QApplication.instance().exec_()