【发布时间】:2021-02-24 17:34:04
【问题描述】:
我正在尝试构建一个代码来在我的代码和我的 Arduino Uno 之间进行通信。我在 COM3 中有一个连接到 Arduino 板的温度传感器(tmp36),我想实时绘制温度值。我还有一个开始按钮,开始获取数据并将其绘制在图表中,还有一个停止按钮来停止这样做。 当我运行我的代码时,我收到一条消息:“无法将字符串转换为浮点数:b'Anal'”,参考第 19 行:“data = np.append(data,float(a[0:4])) ”。你能告诉我有什么问题吗?你能阻止更多的错误吗? 感谢您的宝贵时间!
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from tkinter import *
import numpy as np
import serial as sr
root = Tk()
root.title("Communications")
root.geometry('1920x1080')
root.resizable(False, False)
root.configure(background='black')
data = np.array([])
cond = False
def plot_data():
global cond, data
if (cond == True):
a = s.readline()
a.decode()
if(len(data) < 100):
data = np.append(data,float(a[0:4]))
else:
data[0:99] = data[1:100]
data[99] = float(a[0:4])
lines.set_xdata(np.arange(0, len(data)))
lines.set_ydata(data)
graph_1.draw()
root.after(1, plot_data)
def plot_start():
global cond
cond = True
s.reset_input_buffer()
def plot_stop():
global cond
cond = False
#graph
fig1 = Figure(facecolor="#090b80", figsize=(16,9), dpi=75)
ax1 = fig1.add_subplot(111)
ax1.set_title('Temperature', color='white', fontsize=14, fontweight="bold")
ax1.set_xlabel('Time, s', color='white', fontsize=10, fontweight="bold")
ax1.set_ylabel('ºC', color='white', fontsize=10, fontweight="bold")
ax1.set_xlim(0, 100)
ax1.set_ylim(0, 50)
ax1.spines['bottom'].set_color('#ffffff')
ax1.spines['top'].set_color('#090b80')
ax1.spines['right'].set_color('#090b80')
ax1.spines['left'].set_color('#ffffff')
ax1.tick_params(axis='x', colors='#ffffff')
ax1.tick_params(axis='y', colors='#ffffff')
lines = ax1.plot([], [], color='white')[0]
ax1.set_facecolor("#090b80")
graph_1 = FigureCanvasTkAgg(fig1, master=root)
graph_1.get_tk_widget().place(x=10, y=10, width=540, height=344)
graph_1.draw()
control_frame = Frame(root, bg="#242729", width=893, height=501)
control_frame.place(x=663, y=467)
root.update()
button_1 = Button(control_frame, text="Start", bg="#1cba26", fg="white", font=('arial', 20,'bold'), padx=101, activebackground="#109419", activeforeground="white", borderwidth=0, relief=RAISED, cursor="hand2", command=lambda:plot_start())
button_1.place(x=10, y=107.5)
root.update()
button_2 = Button(control_frame, text="Stop", bg="#eb0c0c", fg="white", font=('arial', 20,'bold'), padx=101.4, activebackground="#990909", activeforeground="white", borderwidth=0, relief=RAISED, cursor="hand2", command=lambda:plot_stop())
button_2.place(x=304, y=107.5)
#start serial port
s = sr.Serial('COM3', 9600)
s.reset_input_buffer()
root.after(1, plot_data)
root.mainloop()
【问题讨论】:
-
不确定您是否知道这一点,但 Arduino IDE 有一个内置的串行绘图仪:arduinogetstarted.com/tutorials/arduino-serial-plotter
-
我知道,但我想收到一堆其他信息。我想把我自己的风格放到绘图仪上。
标签: python matplotlib plot arduino serial-port