GyverTimer - Вывод текущего времени таймера

Mix_man

✩✩✩✩✩✩✩
21 Янв 2020
68
7
Доброго дня!

Появилась необходимость вывода времени таймера, если появилось событие раньше назначенного периода. (Запустили таймер на 5 секунд, а если нажали кнопку раньше, то надо определить это время. (Функция секундомера параллельно выполняемая в функцией интервала)
В самой библиотеке нет такой функции, всю просмотрел, сначала подумал что в переменной _timer оно лежит, но похоже не то..

Предполагаемое решение- добавить в библиотеку переменную+функцию расчёта этого времени. Запомнили - uint32_t время старта = millis(); затем по наступлению события делаем millis()- время старта ...
 

Старик Похабыч

★★★★★★✩
14 Авг 2019
2,011
510
Москва
Ну замечательно.. пост - мысли в слух, а вопрос нет.
Ну я бы предложил тебе такое решение
Добавляешь библиотеку гайвербатон, определяешь там событие нажатия на кнопку на определенный пин.
Заводишь глобальную переменную для запоминания времени как и хотел выше.
Далее так.
Перед инициацией таймера запоминаешь время millis в переменную
При нажатии кнопки выводишь время millis-запомненое время.
Если тебе надо время относительно последнего срабатывания таймера, то в ка;дом вызове процедуры таймера запоминаешь в переменную время millis
 

Mix_man

✩✩✩✩✩✩✩
21 Янв 2020
68
7
Мгм , требующие подтверждения!, дабы лишнего неправильного не городить ;)
У меня не кнопка, а щелевой датчик на аналоговый вход, но не суть важно.

А почему бы не сделать переменную для запоминания членом класса? в public например, чтоб при создании объекта GTimer у него была своя переменная, т.к. на данном этапе уже 2 таймера объявлено..

Попробую этот метод, после финала битвы VSCode VS IDE.. мозг уже набекрень
 

Старик Похабыч

★★★★★★✩
14 Авг 2019
2,011
510
Москва
А почему бы не сделать переменную для запоминания членом класса? в public например, чтоб при создании объекта GTimer у него была своя переменная, т.к. на данном этапе уже 2 таймера объявлено..
Потому что само нажатие кнопки к таймеру никакого логического отношения не имеет. Но если надо несколько таких таймеров, каждый который будет следить за отдельной щелью (кнопкой), то имеет смысл написать наследный класс от таймера, тут да. Все упирается в "стоит ли городить класс для удобства, если это надо разово"
А кнопка, прерыватель не суть. суть в изменении сигнала на пине , так что гайвербатон должен щель обработать :D Но можно и прерываение повесить на этот пин, тут тебе виднее как городить . Каждый заблуждается в меру своих возможностей )
 

Mix_man

✩✩✩✩✩✩✩
21 Янв 2020
68
7
А делать наследный класс чтоб добавить одну функцию - маленько не понятно для чего так загоняться ;). Ради уважения к автору , ака " не будем ничего добавлять к исходнику, дабы не оскорбить автора".
В данном случае это больше выглядит как доработка имеющейся библиотеки, ввиду отсутствия нужной функции, и выпуска новой версии библиотеки на радость всем нам :) Если Mr. Alex сочтёт необходимым.
 

Mix_man

✩✩✩✩✩✩✩
21 Янв 2020
68
7
@Старик Похабыч, В итоге , немного пораскинув мозгами, сделал как ты советовал, не стал мудрить с библиотекой, сделал пару глобальных переменных для своих нужд, и через millis() всё организовал.
Проще простого :)

Осталось только вникнуть как прикрутить переполнение миллис(), но это дело техники.
 

Старик Похабыч

★★★★★★✩
14 Авг 2019
2,011
510
Москва
А зачем прикрутить переполнение ?
Смотри, пусть таймер будет байт и твоя переменная байт. т.е. максимум 255, после 255 сразу опять 0 и по кругу. время идет милис-запомнутое.
если запомнил 200, а время перепыгнуло и стало 5, то 5-200 будет -195, а т.к. минус быть не может, то будет 60, а это и есть разница во времени. ничего делать не надо , все и так работает
Главное что бы все было беззнаковое и одинакового типа
 

Mix_man

✩✩✩✩✩✩✩
21 Янв 2020
68
7
@Старик Похабыч, Понял тебя, Старче :) как раз сейчас подошел к этому моменту, обмозговал всё, вспомнил что ты сказал и согласился с этим. Сразу тему подсказал (y)