Page 1 of 1

Tkinter -Verzögerung, wenn Daten von Arduino mit einem seriellen Modul empfangen werden

Posted: 12 Feb 2025, 13:07
by Anonymous
Ich versuche, Daten von Arduino mit einer einfachen Schleife zu empfangen und Daten alle 100 ms zu senden. Ich versuche, dasselbe mit Tkinter zu ziehen und es auf Leinwand anzuzeigen. Aber die Daten sind verzögert. Ich habe auch Warteschlangen und Thread versucht, aber immer noch tritt das gleiche Problem auf. Ich bitte den Benutzer, Port Nr. die mit der Schaltfläche Eingabetaste gesammelt und an die Funktion fetch_data übergeben

Code: Select all

from queue import Queue
from threading import Thread
import serial
import tkinter as tk

queue = Queue()
port_no = 0

def fetch_data(queue):
global port_no
while True:
data = serial.Serial(port=F"com{port_no}", baudrate=250000)
while data.in_waiting == 0:
pass
data = data.readline()
data = str(data, "UTF-8")
queue.put(data)

# function for after loop
def display_data():

data = queue.get()
my_canvas.itemconfig(my_text, text=f"{data}")
window.after(100, display_data)

def get_data():
global port_no
port_no = comp_entry.get()
Thread(target=fetch_data, args=(queue,), daemon=True).start()

window = tk.Tk()
window.title("ISS Position")
window.config(padx=50, pady=50)
window.minsize(300, 300)

my_canvas = tk.Canvas(height=300, width=300, highlightthickness=0)
my_canvas.grid(column=0, row=0, padx=10, columnspan=2)
my_text = my_canvas.create_text(150, 150, text="Arduino data", font=("arial", 16, "bold"))

comp_entry = tk.Entry(width=6, font=("arial", 16, "bold"))
comp_entry.grid(column=0, row=1, pady=10)

comp_text = tk.Label(text="Enter Comp port", font=("arial", 16, "bold"))
comp_text.grid(column=1, row=1)

start_button = tk.Button(text="Start", command=display_data, font=("arial", 16, "bold"))
start_button.grid(column=0, row=2, pady=10)

connect_button = tk.Button(text="Enter", command=get_data, font=("arial", 16, "bold"))
connect_button.grid(column=1, row=2)

window.mainloop()