#2 gna
Díky za pomoc, ale ještě bych se chtěl poradit s další věcí...
Můj kód je nyní:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import serial
import struct
ser = serial.Serial(port='COM4', baudrate=2000000)
SAMPLES=200
s = struct.Struct('<' + str(SAMPLES) + 'f')
unpacked_data1 = []
def serial_read():
ser.reset_input_buffer()
ser.write("r".encode())
serial_data = ser.read(SAMPLES*4)
unpacked_data = s.unpack(serial_data)
unpacked_data1[1:SAMPLES] = unpacked_data[1:SAMPLES]
ser.close
def getdata():
serial_read()
return (
unpacked_data1
)
def update(event):
set1 = getdata()
line1.set_ydata(set1)
plt.draw()
fig, (ax1) = plt.subplots(1)
set1 = getdata()
line1, = ax1.plot(set1)
btnax = plt.axes([0.4, 0.9, 0.2, 0.1])
button = Button(btnax, 'Update')
button.on_clicked(update)
plt.show()
První vykreslení hodnot je ok, ale u druhého mi to píše ValueError: shape mismatch: objects cannot be broadcast to a single shape. Kde mám chybu?
A ještě druhý dotaz:
Kdybych chtěl v druhém okně vykreslit FFT, tak to udělám takto?
x = np.linspace(0.0, SAMPLES*T, SAMPLES)
y = unpacked_data1
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), SAMPLES//2)
fig, ax2 = plt.subplots(2)
line 2 = ax.plot(xf, 2.0/SAMPLES * np.abs(yf[:SAMPLES//2]))
Díky moc!!