Python 如何使用MatplotLib在图形界面中绘制从传感器接收的值?
我正在开发一个图形界面,当您启动python程序连接到Arduino并使用特定端口接收25个传感器数据(使用电位计执行测试)时,它会询问您要生成的txt类型的新文件的名称,并询问您的Arduino所在的串行端口这些接收到的数据被写入文本文件,除此之外,在图形界面上显示结果,并将其放在图形上。我在实现目标过程中遇到的问题如下 将数据读取为字节,因此当您将其保存到文本文件时,它会以这种方式存储数据Python 如何使用MatplotLib在图形界面中绘制从传感器接收的值?,python,matplotlib,interface,arduino,archive,Python,Matplotlib,Interface,Arduino,Archive,我正在开发一个图形界面,当您启动python程序连接到Arduino并使用特定端口接收25个传感器数据(使用电位计执行测试)时,它会询问您要生成的txt类型的新文件的名称,并询问您的Arduino所在的串行端口这些接收到的数据被写入文本文件,除此之外,在图形界面上显示结果,并将其放在图形上。我在实现目标过程中遇到的问题如下 将数据读取为字节,因此当您将其保存到文本文件时,它会以这种方式存储数据 b'NUMBER\r\n' 这意味着当您想使用replace('b\r\n','')时,给我一个 T
b'NUMBER\r\n'
这意味着当您想使用replace('b\r\n','')时,给我一个
TypeError: a bytes-like object is required, not 'str'
这反过来意味着,在绘制图形时,数据不是按升序排列的,而是按外观排列的
目前,我不知道如何捕捉这个图形,它是在界面中生成的,当它结束时,但如果我不解决这个第一将不会有任何好处
我将尝试替换的部分保留为注释,以便他们知道我将其放在哪里,这里是我的python代码
import matplotlib.pyplot as plt
from tkinter import*
import serial, time
def createTEXT(reading):
text=''
for i in range(len(reading)):
text += str(reading[i]) + ' '
return text
def graph(reading):
y=[]
for i in range(len(reading)):
y.append(reading[i])
return y
def SEND():
NAME=str(NOMBRE.get())
PORT=str(PUERTO.get())
PORT=str(PUERTO.get())
try:
arduino = serial.Serial(PORT,9600)
time.sleep(4)#Stabilize the connection
for i in range(25):
arduino.write(b'1')#Bits are sent here
reading=[]
for i in range(25):
reading.append(arduino.readline())
arduino.close()
# for i in range(len(reading)):
# reading[i][len(reading[i])-1] = reading[i][len(reading[i])-1].replace('b\r\n','')
except:
messagebox.showinfo(message="Please verify that the Port you put in is the right one", title="ERROR")
archive = open(NAME+".txt","w") #Open the file in write mode "write"
Text=createTEXT(reading)
archive.write(Text)
archive.close()
print(Text)
y=graph(reading)
plt.plot(y)
# plt.show
POTENTIOMETER = Tk()
frame = Frame(POTENTIOMETER)
#Objects to use
ASKNAME = Label(frame,text= "Welcome, what name will this new file have?")
NOMBRE = Entry(frame)
ASKPORT = Label(frame,text= "Which port your ARDUINO UNO is connected to?")
PUERTO = Entry(frame)
SEND= Button(frame, text = "SEND", command = SEND)
#Content
ASKNAME.pack()
NOMBRE.pack()
ASKPORT.pack()
PUERTO.pack()
SEND.pack()
frame.pack(padx = 200, pady=150)#Tamaño márco
POTENTIOMETER.mainloop()
这是我的Arduino代码,我用的是Arduino代码,所以它都是连接的
该程序的制作使得图形类似地显示在python控制台中,直到程序关闭为止
int s = 0;
void setup() {
Serial.begin(9600);
pinMode(A2, INPUT);
}
void loop() {
if (Serial.read() == '1') {
delay(1000);
for (int i = 0; i < 25; i++) {
s = analogRead(A2);
delay(500);
Serial.println(s);
}
}
}
b'1016\r\n' b'1019\r\n' b'1016\r\n' b'1018\r\n' b'1016\r\n' b'1017\r\n' b'1019\r\n' b'1018\r\n' b'1016\r\n' b'1018\r\n' b'1018\r\n' b'965\r\n' b'1016\r\n' b'1002\r\n' b'1018\r\n' b'781\r\n' b'1019\r\n' b'1018\r\n' b'1019\r\n' b'1019\r\n' b'1019\r\n' b'1019\r\n' b'811\r\n' b'418\r\n' b'369\r\n'