Threading DS3231 Часы реального времени с Python - PullRequest
0 голосов
/ 04 апреля 2019

Я занимаюсь разработкой робота для отслеживания.Я успешно создал модуль, содержащий класс отслеживания, который я могу импортировать в скрипт и заставить его правильно работать.Я использую часы реального времени для записи количества секунд, в течение которых отслеживание прошло успешно.Как только я запускаю свой скрипт, я нажимаю кнопку.Этот вход должен выполнять код отслеживания и одновременно выполнять функцию часов;функция часов будет работать в фоновом режиме.Во-первых, я хочу подтвердить;лучше всего подходит многопоточность функции часов?Если нет, что будет лучшим способом?В настоящее время происходит следующее: поток запускается, и функция непрерывно печатает секунды, прежде чем перейти к части «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)

В идеале, первый оператор if после 'while True' будет инициировать отслеживание и запускать часы одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...