Я читаю карты в Python с помощью считывателя RFID и хочу определить, как долго карта была обнаружена в секундах, минутах и часах.
Программа начинает работать после обнаружения карты и запускает подсчет, но проблема в том, что код не прерывается при извлечении карты, а продолжает считать, даже если карта не обнаружена.
Код прикреплен ниже:
import time as tm
import serial
import readCard
def getActivity():
# tm.sleep(3)
while True:
card = readCard.readCard()
cards = card
if card != '':
seconds = 0
minutes = 0
hours = 0
while True:
print(str(hours).zfill(2) + ":"
+ str(minutes).zfill(2) + ":"
+ str(seconds).zfill(2))
seconds = seconds + 1
tm.sleep(1)
if seconds == 60:
seconds = 0
minutes = minutes + 1
if minutes == 60:
minutes = 0
hours = hours + 1
else:
print('No Card Detected...')
getActivity()
Результат выглядит следующим образом:
00:00:00
00:00:01
00:00:02
00:00:03
00:00:04
00:00:05
Я ожидаю, что время начнет отсчет, если карта будет обнаружена, и после того, как карта будет удалена, программа должна начать печатать «Карта не обнаружена ...».
Для чего второй while True
?
Чтобы он продолжал циклически распечатывать время, увеличивая время в секундах, минутах и часах
Вы никогда не уйдете со второго while True
. Вы должны читать карту каждую секунду и проверять, не была ли карта удалена. Добавьте код ниже ко второму while True
. Я думаю, что это может решить вашу проблему, и после извлечения карты запрограммируйте break
из while
.
if readCard.readCard() == '':
break
или вы можете изменить с while true
на while readCard.readCard()
.
@Dronakuul, я попробовал оба предложения, и они сработали. Я также хотел бы, чтобы он начинал отсчет с нуля, как только карта была помещена обратно. Это вывод, который он выдает в настоящее время: 00:00:00 00:00:01 00:00:02 00:00:03 Карта не обнаружена... Карта не обнаружена... Карта не обнаружена... Карта не обнаружена ... Карта не обнаружена... 00:00:04 00:00:05 Карта не обнаружена... Карта не обнаружена... Карта не обнаружена..
Это действительно странно. Я бы не ожидал этого, так как вы находитесь во внешнем цикле, вы можете вернуться только путем сброса секунд.
Значение while True в разделе def getActivity предназначено для того, чтобы программа постоянно обнаруживала карты с помощью считывателя RFID.