SerialGraph.py 2.43 KB
Newer Older
Alisson Claudino's avatar
Alisson Claudino committed
1
from pyqtgraph.Qt import QtGui, QtCore       #importação de classes
2 3
import pyqtgraph as pg
import serial
Alisson Claudino's avatar
Alisson Claudino committed
4 5 6 7 8 9 10 11
import time

ser = serial.Serial('/dev/ttyUSB0', 115200)  #Inicialização da Serial com baudrate 115200bps
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
12 13 14 15 16 17

app = QtGui.QApplication([])
win = pg.GraphicsWindow()
p1 = win.addPlot()
curve1 = p1.plot()

Alisson Claudino's avatar
Alisson Claudino committed
18 19 20 21 22
y1 = []                                     #Inicialização da lista dinâmica dos valores de y
x1 = []                                     #Inicialização da lista dinâmica dos valores de x

x_max = 50                                  #Variável que define o tamanho do eixo
indx = 0                                    #Variável auxiliar de contagem
23

24

Alisson Claudino's avatar
Alisson Claudino committed
25 26 27 28

def update():                               #Método para atualizar os arrays com valores de x, y e atualizar o gráfico
    global curve1, indx, y1, x1, ser        #Dá acesso das variáveis globais à função
    while (ser.inWaiting() == 0):           #Aguarda a serial liberar dado
29
        pass
Alisson Claudino's avatar
Alisson Claudino committed
30 31 32 33 34 35
    readData = float(ser.readline())        #Lê o dado da serial
    y1.append(readData)                     #Armazena o dado na lista do eixo y
    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
        indx = x_max                        #impede indx de divergir
36
    else:
Alisson Claudino's avatar
Alisson Claudino committed
37
        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
38

Alisson Claudino's avatar
Alisson Claudino committed
39 40 41
    curve1.setData(x1, y1)                  #Atualiza os dados da curva
    p1.setYRange(0, 1023, padding=0)        #Define os limites do gráfico
    p1.setXRange(0, max_x, padding=0)
42

Alisson Claudino's avatar
Alisson Claudino committed
43
    app.processEvents()                     #
44

Alisson Claudino's avatar
Alisson Claudino committed
45 46 47
timer = QtCore.QTimer()                     #
timer.timeout.connect(update)               #
timer.start(0)                              #
48 49


Alisson Claudino's avatar
Alisson Claudino committed
50
if __name__ == '__main__':                  #
51
    import sys
Alisson Claudino's avatar
Alisson Claudino committed
52 53 54 55
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_'):   #
        QtGui.QApplication.instance().exec_()                          #