Я пытаюсь отобразить данные в режиме реального времени, полученные из последовательного порта. Но когда я реализую это в то время как l oop, я получаю все что угодно, кроме реальных данных. Если я удаляю график в то время как l oop, в конце я получаю 1 график с правильными данными.
Есть ли способ получить график в реальном времени, возможно, реализовать буфер для данные ??
import time
import matplotlib.pyplot as plt
import serial
import numpy as np
def bytes_to_int(bytes): # Change bytes to int
result = 0
for b in bytes:
result = result * 256 + int(b)
return result
ser = serial.Serial(port='COM11', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, timeout=1)
#serial.Serial.write()
val_vol = [] # Initialize arrays
val_time = []
n = 5000 # n = samples
count = 0
while (count<=n):
volx = ser.read() # Read Serial value
vol1x = bytes_to_int(volx) # Change bytes to int
print(vol1x)
val_vol.append(vol1x) # Add data to array
val_time.append(time.clock()) # Get the time for each data value to plot (vol vs t)
t1 = np.array(val_time)
v1 = np.array(val_vol)
plt.plot(val_vol) # Plot data
plt.show(block=False) # Plot in real time
count += 1 # Add count of sample
time.sleep(0.01)
plt.pause(0.001)
plt.close(fig=None) # Close real time plot window
vol1 = np.array(val_vol) * 10 # Increase amplitude of values
temp_1 = np.ones(len(vol1)) # Temp var for line
val_vol=val_vol[2:] # Remove the 2 first values
list(map(lambda num:num*10,val_vol))
maxi = vol1.max()
mini = vol1.min()
amp = maxi - mini
veint = (0.1 * amp + mini) * temp_1
ochen = (0.9 * amp + mini) * temp_1
print(val_vol)
plt.plot(t1, veint)
plt.plot(t1, ochen)
plt.plot(t1, vol1)
plt.show()