У меня есть USB-датчик GPS, и я пытаюсь создать интерфейс человек / машина, в котором пользователь нажимает кнопку «Пуск», и данные начинают собираться.Для этого я помог себе с этим кодом http://robotic -controls.com / learn / python-guis / tkinter-serial .
Мне удалось получить данные и отобразить их на экране только тогда, когда пользователь нажал кнопку «Пуск», но я увидел, что когда я нажимаю кнопку, на экране отображается много предыдущих данных.Мой датчик выдает мне данные каждую секунду, когда я запускаю свою программу, если я жду 5 секунд, прежде чем нажать кнопку пуска, у меня будет 5 строк, отображаемых на экране, когда я нажму на нее.
Вот мойкод:
import serial
import tkinter
from serial import *
from tkinter import *
gps = list()
serialPort = "COM12"
baudRate = 4800
ser = Serial(serialPort , baudRate, timeout=0, writeTimeout=0)
root = Tk()
root.wm_title("Signal GPS")
etat = StringVar()
etat.set("Démarrer acquisition")
def StartStop():
j=0
if etat.get() == "Arreter acquisition" :
etat.set("Reprendre acquisition")
j=1
if (etat.get() == "Démarrer acquisition" or etat.get() == "Reprendre acquisition") and j == 0 :
etat.set("Arreter acquisition")
readSerial()
def quitter():
root.destroy()
valeurs = Canvas(root)
valeurs.grid(column=0,row=0, padx=10)
texte_lati = Label(valeurs, text='Latitude')
texte_lati.grid(column=0, row=0)
lati = Text ( valeurs, width=20, height=20, takefocus=0)
lati.grid(column=0, row=1)
texte_longi = Label(valeurs, text='Longitude')
texte_longi.grid(column=1, row=0)
longi = Text ( valeurs, width=20, height=20, takefocus=0)
longi.grid(column=1, row=1)
start = Button(root, textvariable=etat, text=etat, command=StartStop)
start.grid(column=0,row=2)
quitte = Button(root, text='Quitter', command=quitter)
quitte.grid(column=1,row=2)
serBuffer = ""
def readSerial():
while etat.get() == "Arreter acquisition" :
c = ser.read().decode("latin1")
if len(c) == 0:
break
global serBuffer
if c == '\r':
c = ''
if c == '\n':
if serBuffer[0:6] == '$GPGGA' :
gps.append(serBuffer.split(','))
serBuffer += "\n"
if gps[-1][2] == '' :
lati.insert('0.0', 'Pas de signal GPS\n')
else :
lati.insert('0.0', str(gps[-1][2]) + '\n')
if gps[-1][4] == '' :
longi.insert('0.0', 'Pas de signal GPS\n')
else :
longi.insert('0.0', str(gps[-1][4]) + '\n')
serBuffer = ""
else:
serBuffer += c
root.after(100, readSerial)
root.mainloop()
ser.close()
Может кто-нибудь объяснить мне, почему я получаю все предыдущие данные?Я ожидал, что использование while etat.get() == "Arreter acquisition" :
не сохранит данные, но на самом деле ...