无法生成新数据、使用matplotlib绘图并同时通过串行连接发送数据

fnx2tebb  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(106)

我通过串行从Python向Arduino发送数据,我有两段代码可以单独正常工作:

  • 第一部分生成新的数据,并在每次按回车键时使用matplotlib绘制它。
  • 第二块生成新数据,并在我每次按回车键时通过串行端口(使用with serial.Serial)发送它。

当我合并这两个部分,生成新数据,绘制它,并在每次按回车键时发送它,数据仍然发送正常,但matplotlib图保持空白,直到我终止代码,此时它绘制最后一组生成的数据。有没有一种方法可以同时做所有这些事情?下面包含的代码(为了清楚起见,我将所有的数据生成代码替换为对np.random的调用)。

import matplotlib.pyplot as plt
import numpy as np
import serial

with serial.Serial(port='COM7', baudrate=115200, timeout=0.5) as arduino:
    # Initialize figure
    fig, ax = plt.subplots()
    
    while True:
        # Clear axes and wait for user go-ahead
        ax.cla()
        command = input()
        if command == 'x':
            break

        # Generate data and plot
        data = np.random.rand(6)
        ax.plot(data)

        # Send data to arduino and read back response
        for val in data:
            arduino.write(str(val).encode())
            arduino.write('\n'.encode())
        for i in range(data.size):
            received_data = arduino.readline()
            print(received_data.decode('utf-8').strip())

字符串

8e2ybdfx

8e2ybdfx1#

尝试调用plt.ion()以确保matplotlib处于交互模式

  • https://matplotlib.org/stable/users/explain/interactive.html#interactive-mode

这应该确保图形在显示后不会阻塞,并且可以立即绘制更改。

相关问题