class Stopwatch: def __init__(self): self.hours = 0 # Значение часов self.mins = 0 # Значение минут self.secs = 0 # Значение секунд self.start_time = 0 # Время запуска self.state = 0 # Состояние. 0 - секундомер не запущен, 1 - запущен self.backcolor = tft.rgbcolor(255,251,240) # Цвет фона self.fontcolor = tft.rgbcolor(39,40,51) # Цвет шрифта self.draw_init() # Вызов функции отображения начального значения- нулей # Функция вывода начального значения секундомера- нулей def draw_init(self): self.draw_value(98, 132, 2, 0) # Выводим на дисплей 0 секунд self.draw_value(55, 125, 3, 0) # Выводим на дисплей 0 минут self.draw_value(5, 125, 3, 0) # Выводим на дисплей 0 часов # Выводим разделитель часов и минут tft.text(41, 125, ":", font.terminalfont, self.fontcolor, 3) # Выводим разделитель минут и секунд tft.text(90, 130, ":", font.terminalfont, self.fontcolor, 2) # Основная функция секундомера, отсчет времени def tick(self): if self.state: # отсчет производим только, если секундомер запущен # Находим разницу в миллисекундах между текущим временем и временем запуска diff = time.ticks_diff(time.ticks_ms(), self.start_time) hours = diff // (1000 * 60 * 60) # Деление без остатка. Находим сколько целых часов прошло diff = diff % (1000 * 60 * 60) # Находим остаток после деления на часы и сохраняем в diff mins = diff // (1000 * 60) # Деление без остатка. Находим сколько целых минут прошло diff = diff % (1000 * 60) # Находим остаток после деления на минуты и сохраняем в diff secs = diff // (1000) # Деление без остатка. Находим сколько целых секунд прошло # Если сохраненное ранее значение секунд отличается от вычисленных- обновляем и выводим на дисплей if secs != self.secs: self.secs = secs self.draw_value(98, 132, 2, secs) # Если сохраненное ранее значение минут отличается от вычисленных- обновляем и выводим на дисплей if mins != self.mins: self.mins = mins self.draw_value(55, 125, 3, mins) # Если сохраненное ранее значение часов отличается от вычисленных- обновляем и выводим на дисплей if hours != self.hours: self.hours = hours self.draw_value(5, 125, 3, hours) # Функция запуска и остановки секундомера def start_stop(self): if self.state: # Если секундомер запущен- останавливаем self.state = 0 else: # Иначе- запускаем self.state = 1 self.start_time = time.ticks_ms() # Сохраняем время запуска секундомера # Функция отображения на дисплее значений def draw_value(self, x, y, size, value): # Перед выводом на дисплей новых данных закрашиваем старые прямоугольником с цветом фона tft.rect(x+2, y, 6 * size * 2, 8 * size -2, self.backcolor) # Если значение для вывода менее 10, то добавляем ведущий ноль, чтобы всегда было 2 знака # конвертируем значение из числа в строку if value < 10: value = '0' + str(value) else: value = str(value) # Выводим значение в виде строки на дисплей в нужном месте нужным цветом и размером tft.text(x, y, value, font.terminalfont, self.fontcolor, size)