ich möchte gerne mit einem Python-Programm (mit Tkinter) DAten von der seriellen Schnittstelle einlesen. Plattform ist Windows.
Die DAten kommen in der Form
$A123
$B555
$C333
$A123
$B555
$C333
..
(Jeweils CRLF am Ende jeder Zeile.
Im Terminalprogramm hterm sieht alles gut aus und im Prinzip bekomme ich die Daten auch im Python-Programm zu fassen.
Es wird jeweils "gefiltert", ob die Zeile zum Beispiel mit $A anfängt. Wenn ja, dann wird der String in eine Variable geschrieben, die mit einem LAbel verknüpft ist.
Im Prinzip funktioniert das, aber es gibt nach kurzer Zeit immer einen Überlauf oder so etwas:
Exception in Tkinter callback
Traceback (most recent call last):
File ..
return self.func(*args)
File ..
func(*args)
File ... line 44, in empfangen
IndexError: string index out of range
Hier das Programm:
Code: Alles auswählen
from Tkinter import *
import serial
fenster=Tk()
UART = serial.Serial('COM4', 9600, timeout=0)
Activ = False
if(not(UART.isOpen())):
Activ = True
UART.open()
a_string=StringVar()
a_string.set("A Anfang")
def empfangen():
daten = UART.readline()
if len(daten) > 0:
# daten= daten.strip("\r") # abschneiden ??
daten= daten.strip("\n") # abschneiden ??? <- meine Versuche, das zu beheben
if daten[0]=="$":
if daten[1] == "A": # Wenn das erste Zeichen ein A ist
a_string.set(daten[2:]) # Variable in Label updaten
UART.flushInput() # Puffer leeren # <- Mein Versuch, das Problem zu beheben. Ohne Erfolg.
fenster.after(100, empfangen) # 100 Millisekunden
textfeld4=Label(fenster,textvariable=a_string)
textfeld4.grid(row=1,column=1)
fenster.mainloop()
Ich wäre dankvar für einen Tipp.