我正在设计一个跟踪机器人。我已经成功制作了一个包含跟踪类的模块,可以将其导入到脚本中并使其正确执行。我正在使用实时时钟记录跟踪成功的秒数。运行脚本后,请按一个按钮。该输入应执行跟踪代码并同时执行时钟功能。时钟功能将在后台运行。首先,我要确认;时钟功能线程化是最好的方法吗?如果没有,最好的方法是什么?当前发生的情况是,线程启动并且该函数连续打印秒数,然后进入“ while True”部分。我了解为什么会这样;我在“ while True”之前开始。我过早启动线程,因为我无法在while循环中启动线程(我不明白为什么)。我应该如何启动线程并一起执行跟踪代码?
def Timer():
i2c= io.I2C(board.SCL,board.SDA)
rtc = adafruit_ds3231.DS3231(i2c)
if True:
t = time.struct_time((2019,0,0,0,0,0,0,0,-1))
rtc.datetime = t
print()
while True:
t = rtc.datetime
seconds = t.tm_sec
minutes = t.tm_min
hours = t.tm_hour
print("{}:{}:{}".format(hours, minutes, seconds))
#time.sleep(1)
time_thread = threading.Thread(target = Timer, name = 'thread 1', args = [])
time_thread.start()
tracking = False
oscillating = False
count = 0
while True:
if mem.input(29) == 0 and count == 0:
I.Initiate()
mem.output(36,mem.HIGH)
count = count + 1
tracking = True
elif mem.input(29) == 0 and count == 1:
time.sleep(0.1)
mem.output(32, mem.HIGH)
mem.output(36, mem.LOW)
count = count + 1
tracking = False
oscillating = True
elif mem.input(29) == 0 and count == 2:
time.sleep(0.1)
mem.output(32, mem.LOW)
count = 0
oscillating = False
time.sleep(0.05)
理想情况下,“ while True”之后的第一个if语句将启动跟踪并同时启动时钟。