我希望能够打印和更新从一个小型GPS实时检索的值。不管出于什么原因,代码不会更新GPS值,并且只会打印相同的值,直到我重新启动代码。我的猜测是变量不能更新,但我不知道如何修复它。
while ser.inWaiting() > 0:
decoded = (ser.read(1).decode)
echo += decoded()
class GPS:
def __init__(self):
#Write GPSinput
out = ''
ser.write(com.GPSstatus.encode())
time.sleep(1)
#Read output
while ser.inWaiting() > 0:
decoded = (ser.read(1).decode)
out += decoded()
strlen = len(str(out))
substr = out[0:strlen-9]
#GPS? information list
variables = substr.splitlines()
#Storing each output in a variable
self.PULSE_SAWTOOTH = [int(s) for s in variables[1] if s.isdigit()]
self.TRACKED_SATELLITES = [int(s) for s in variables[2] if s.isdigit()]
self.VISIBLE_SATELLITES = [int(s) for s in variables[3] if s.isdigit()]
self.LONGITUDE = variables[5]
self.longlen = len(self.LONGITUDE)
self.LONGDEG = self.LONGITUDE[0:self.longlen-7]
self.LONGMIN = self.LONGITUDE[self.longlen-7:]
self.LATITUDE = variables[6]
self.latlen = len(self.LATITUDE)
self.LATDEG = self.LATITUDE[0:self.latlen-7]
self.LATMIN = self.LATITUDE[self.latlen-7:]
self.HEIGHT = variables[7]
self.KNOTS = variables[8]
self.DEGREES = [9]
self.GPS_STATUS = variables[10]
self.TIMING_MODE = variables[17]
self.FIRMWARE_VERSION = variables[20]
if __name__ == "__main__":
#Call the functions
gps = GPS()
for i in range(100):
print(gps.LATITUDE)
#Enterable Parameters
# PULSE_SAWTOOTH
# TRACKED_SATELLITES
# VISIBLE_SATELLITES
# LONGITUDE
# longlen
# LONGDEG
# LONGMIN
# LATITUDE
# latlen
# LATDEG
# LATMIN
# HEIGHT
# KNOTS
# DEGREES
# GPS_STATUS
# TIMING_MODE
# FIRMWARE_VERSION我猜这是一个非常简单的解决方案,但我是一个初学者,我不完全理解发生了什么,足以修复它。如果有人能提供一些知识并帮助我解决我的问题,我将不胜感激。
发布于 2020-02-15 12:51:27
除了while循环缩进错误和可能的decode错误之外。您每次都会得到相同的print(gps.LATITUDE)输出,因为您从未更新过它,无论是通过gps对象,还是调用GPS类的成员函数。初始gps对象的LATITUDE值始终等于值variables[6],如果该变量没有改变,那么LATITUDE变量也不会改变。您有多种选择,您可以直接更新LATITUDE:
class GPS:
def __init__(self , latitudeValue = 0):
self.LATITUDE = latitudeValue
if __name__ == "__main__":
gps = GPS()
print(gps.LATITUDE) # Prints 0, default value of latitudeValue
gps.LATITUDE = 5
print(gps.LATITUDE) # Now prints 5, changed value of LATITUDE in gps object或者,您可以将其作为函数调用的一部分:
class GPS:
def __init__(self , latitudeValue = 0):
self.LATITUDE = latitudeValue
def updateLatitude(self , newValue):
self.LATITUDE = newValue
if __name__ == "__main__":
gps = GPS()
print(gps.LATITUDE) # Prints 0
gps.updateLatitude(10) # Updates LATITUDE VALUE
print(gps.LATITUDE) # Prints 10无论variables[6]的值是多少,都可以使用这两种方法中的任何一种。同样,您可以将它与类的所有成员变量一起使用。
对于实时更新,您需要使用事件处理函数,此场景可能需要listener。而不需要更多地了解通过总线传递数据的设备。如果您的设备制造商没有提供可使用的API,那么当您使用循环不断地重新初始化对象时,您可以使用,另一种方法是module reloading。
https://stackoverflow.com/questions/60235739
复制相似问题