本次工程的目标是为了实现ADC采集信号的上位机显示。
硬件方面是通过CH340虚拟串口上传ADC数据,波特率115200
代码如下
import serial
import pyqtgraph as pg
import numpy as np
import array
import threading
#函数以外定义的是全局变量,函数以内的是局部变量
def COM():
while True:
ad_value = int(com.readline().decode('ascii'))
print(ad_value)
if len(data)<N:
data.append(ad_value) #添加数据
else:
data[:-1] = data[1:] #实现移动
data[-1] = ad_value
def plotData():
curve.setData(data)
app = pg.mkQApp()
#建立显示数组和显示界面
data = array.array('d')
N = 500
win = pg.GraphicsLayoutWidget(show=True)
win.resize(800,400)
win.setWindowTitle('NX-CBm波形采集')
#建立波形显示区域
p = win.addPlot()
p.showGrid(x=True,y=True)
p.setRange(xRange=[0,N-1],yRange=[-500,500],padding=0) #X,Y坐标显示
p.setLabels(left='数据轴',bottom='时间轴',title='振动值')
# 建立一条线
curve = p.plot(pen='y')
#打开串口,读取数据
com = serial.Serial('COM8',115200)
#ad_vaule = com.readline().decode('ascii') #这里是ascii显示
th = threading.Thread(target=COM)#目标函数一定不能带()被这个BUG搞了好久
th.start()
timer = pg.QtCore.QTimer()
timer.timeout.connect(plotData) #30ms刷新波形
timer.start(10)
app.exec_()
8-16行为串口通讯和实现显示的移动
18-19是显示线条
22-35建立界面
39 打开串口
42-43给串口单独开个线程
45-47定时刷新波形
效果如下,不知道怎么做动态效果,实际整个波形是向右边移动的