我正在嘗試為arduino編寫python GUI,其思想是計算機將通過串行端口與arduino進行通信。我認為arduino代碼本身太復雜,無法嘗試像Matlab一樣直接控制事物,因此我想通過串行發送命令來控制它。除此之外,我還試圖現場繪制一些數據。我很難在不將連接端口硬編碼到腳本中的情況下運行實時繪圖。def connectArduino(): global e1 serial_port = e1.get() baud_rate = 9600 path = "data.txt" ser = serial.Serial(serial_port, baud_rate, timeout=0, writeTimeout=0)def setTunings(): global entries kp = entries[0][1].get() ki = entries[1][1].get() kd = entries[2][1].get() print(kp + ki + kd)def animate(i): ser.reset_input_buffer() data = ser.readline() data_array = data.split('\t') xvalue = float(data_array[0])/1000 yvalue = float(data_array[1]) yar.append(yvalue) xar.append(xvalue) line.set_data(xar, yar) ax1.set_xlim(0, i+1) print(data_array[0] + '\t' + data_array[1])import serialfrom Tkinter import *from matplotlib import pyplot as pltimport matplotlib.animation as animationfrom matplotlib import stylefrom matplotlib.backends.backend_tkagg import FigureCanvasTkAggroot = Tk()#root.geometry('1200x700+200+100')root.title('Temperature Control')root.config(background='#fafafa')frame = Frame(root)frame.pack(side=LEFT)l1 = Label(frame, text = "Connection Port:", anchor ='w')l1.pack()e1 = Entry(frame)e1.pack()b1 = Button(frame, text = "Connect", command = connectArduino)b1.pack()fields = 'Kp', 'Ki', 'Kd'entries = []for field in fields: row = Frame(frame) lab = Label(row, width=15, text=field, anchor='w') ent = Entry(row) row.pack(side=TOP, fill=X, padx=5, pady=5) lab.pack(side=LEFT) ent.pack(side=RIGHT, expand=YES, fill=X) entries.append((field, ent))b2 = Button(frame, text = 'Set Tunings')b2.pack()b3 = Button(frame, text = 'Start')b3.pack(side=LEFT, padx=5, pady=5)#b2.pack(side = LEFT, padx=5, pady=5)b4 = Button(frame, text = 'Stop')b4.pack(side=RIGHT, padx=5, pady=5)#b3.pack(side = LEFT, padx=5, pady=5)我必須承認,我比python更習慣于C和cpp,所以我一直在閱讀的關于gui的很多東西已經讓我有些頭疼了。TLDR:嘗試從串行提示符下進行寫入/讀取,以及在實時繪圖中顯示一些數據,全部使用GUI和按鈕/文本輸入用戶輸入。
添加回答
舉報
0/150
提交
取消