Arduino连接超声波传感器时Matplotlib实时绘图数值显示异常求助
问题修复方案
故障原因
核心故障是你直接把串口读取的字符串存入了Y轴数组,Matplotlib识别到Y值为字符串类型时,会将其作为分类变量处理,不会按照数值大小排序,因此会出现小数值显示在大数值上方的异常。
修复代码
import serial import matplotlib.pyplot as plt # 串口初始化,根据你的实际端口修改 ser = serial.Serial("COM3", baudrate=9600, timeout=1) plt.ion() fig = plt.figure() x, y = list(), list() i = 0 while True: ser.write(b'u') data = ser.readline() # 解码后转成整数再存入Y数组,有小数需求可换成float() pri_data = int(data.decode("ascii").strip()) x.append(i) y.append(pri_data) # 清除上一轮绘图内容,避免曲线堆叠 plt.clf() # 可根据你的超声波量程固定Y轴范围,比如最大测距400cm就设为0-400 # plt.ylim(0, 400) plt.plot(x, y) plt.pause(0.0001) i += 1 print(pri_data)
额外优化说明
- 新增了
.strip()处理解码后的字符串,自动过滤掉串口传输附带的换行符、空格等无效字符,避免类型转换报错 - 每次循环前清除旧画布,不会重复生成多条曲线,长时间运行也不会出现卡顿
- 可选固定Y轴范围,避免每次更新数据时Y轴刻度频繁跳动,观感更好
内容的提问来源于stack exchange,提问作者Falgun Pawar
相关产品推荐
相关产品推荐

