使用Python线程化DS3231实时时钟

时间:2019-04-04 17:49:30

标签: python multithreading opencv raspberry-pi3

我正在设计一个跟踪机器人。我已经成功制作了一个包含跟踪类的模块,可以将其导入到脚本中并使其正确执行。我正在使用实时时钟记录跟踪成功的秒数。运行脚本后,请按一个按钮。该输入应执行跟踪代码并同时执行时钟功能。时钟功能将在后台运行。首先,我要确认;时钟功能线程化是最好的方法吗?如果没有,最好的方法是什么?当前发生的情况是,线程启动并且该函数连续打印秒数,然后进入“ 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语句将启动跟踪并同时启动时钟。

0 个答案:

没有答案