├── .gitattributes
├── .github
└── workflows
│ └── tg-send.yml
├── LICENSE
├── README.md
├── README_EN.md
├── examples
├── GTimer
│ └── GTimer.ino
├── GTimer_button
│ └── GTimer_button.ino
├── GTimer_demo
│ └── GTimer_demo.ino
├── GTimer_manual
│ └── GTimer_manual.ino
├── GTimer_multiple
│ └── GTimer_multiple.ino
├── GTimer_timeout
│ └── GTimer_timeout.ino
├── GTimer_timeoutContinue
│ └── GTimer_timeoutContinue.ino
├── GTimer_us
│ └── GTimer_us.ino
├── Old_examples
│ ├── GTimer
│ │ └── GTimer.ino
│ ├── GTimer_manual
│ │ └── GTimer_manual.ino
│ ├── GTimer_multiple
│ │ └── GTimer_multiple.ino
│ ├── GTimer_us
│ │ └── GTimer_us.ino
│ └── Screenshot_2.jpg
├── Screenshot_2.jpg
└── stop_resume
│ └── stop_resume.ino
├── keywords.txt
├── library.properties
└── src
├── GyverTimer.cpp
└── GyverTimer.h
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/workflows/tg-send.yml:
--------------------------------------------------------------------------------
1 |
2 | name: Telegram Message
3 | on:
4 | release:
5 | types: [published]
6 | jobs:
7 | build:
8 | name: Send Message
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: send telegram message on push
12 | uses: appleboy/telegram-action@master
13 | with:
14 | to: ${{ secrets.TELEGRAM_TO }}
15 | token: ${{ secrets.TELEGRAM_TOKEN }}
16 | disable_web_page_preview: true
17 | message: |
18 | ${{ github.event.repository.name }} v${{ github.event.release.tag_name }}
19 | ${{ github.event.release.body }}
20 | https://github.com/${{ github.repository }}
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 AlexGyver
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/GyverLibs/GyverTimer/releases/latest/download/GyverTimer.zip)
2 | [](https://registry.platformio.org/libraries/gyverlibs/GyverTimer)
3 | [](https://alexgyver.ru/)
4 | [](https://alexgyver.ru/support_alex/)
5 | [](https://github-com.translate.goog/GyverLibs/GyverTimer?_x_tr_sl=ru&_x_tr_tl=en)
6 |
7 | [](https://t.me/GyverLibs)
8 |
9 | |⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
**ВНИМАНИЕ, БИБЛИОТЕКА УСТАРЕЛА! ИСПОЛЬЗУЙ БИБЛИОТЕКУ [GTimer](https://github.com/GyverLibs/GTimer), ОНА ЛЕГЧЕ И ИМЕЕТ БОЛЬШЕ ВОЗМОЖНОСТЕЙ**
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️|
10 | | --- |
11 |
12 | # GyverTimer
13 | Пполноценный таймер на базе системных millis() / micros()
14 | **ВНИМАНИЕ, БИБЛИОТЕКА УСТАРЕЛА! ИСПОЛЬЗУЙ [TimerMs](https://github.com/GyverLibs/TimerMs)**
15 | - Миллисекундный и микросекундный таймер
16 | - Два режима работы:
17 | - Режим интервала: таймер "срабатывает" каждый заданный интервал времени
18 | - Режим таймаута: таймер "срабатывает" один раз по истечении времени (до следующего перезапуска)
19 | - Служебные функции:
20 | - Старт
21 | - Стоп
22 | - Сброс
23 | - Продолжить
24 |
25 | ### Совместимость
26 | Совместима со всеми Arduino платформами (используются Arduino-функции)
27 |
28 | ### Документация
29 | К библиотеке есть [расширенная документация](https://alexgyver.ru/gyvertimer/)
30 |
31 | ## Содержание
32 | - [Установка](#install)
33 | - [Инициализация](#init)
34 | - [Использование](#usage)
35 | - [Пример](#example)
36 | - [Версии](#versions)
37 | - [Баги и обратная связь](#feedback)
38 |
39 |
40 | ## Установка
41 | - Библиотеку можно найти по названию **GyverTimer** и установить через менеджер библиотек в:
42 | - Arduino IDE
43 | - Arduino IDE v2
44 | - PlatformIO
45 | - [Скачать библиотеку](https://github.com/GyverLibs/GyverTimer/archive/refs/heads/main.zip) .zip архивом для ручной установки:
46 | - Распаковать и положить в *C:\Program Files (x86)\Arduino\libraries* (Windows x64)
47 | - Распаковать и положить в *C:\Program Files\Arduino\libraries* (Windows x32)
48 | - Распаковать и положить в *Документы/Arduino/libraries/*
49 | - (Arduino IDE) автоматическая установка из .zip: *Скетч/Подключить библиотеку/Добавить .ZIP библиотеку…* и указать скачанный архив
50 | - Читай более подробную инструкцию по установке библиотек [здесь](https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA)
51 | ### Обновление
52 | - Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
53 | - Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
54 | - Вручную: **удалить папку со старой версией**, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
55 |
56 |
57 |
58 | ## Инициализация
59 | ```cpp
60 | // mode: MS/US
61 | GTimer myTimer(mode);
62 | GTimer myTimer(mode, interval);
63 | ```
64 |
65 |
66 | ## Использование
67 | ```cpp
68 | void setInterval(uint32_t interval); // установка интервала работы таймера (также запустит и сбросит таймер) - режим интервала
69 | void setTimeout(uint32_t timeout); // установка таймаута работы таймера (также запустит и сбросит таймер) - режим таймаута
70 | boolean isReady(); // возвращает true, когда пришло время
71 | boolean isEnabled(); // вернуть состояние таймера (остановлен/запущен)
72 | void reset(); // сброс таймера на установленный период работы
73 | void start(); // запустить/перезапустить (со сбросом счёта)
74 | void stop(); // остановить таймер (без сброса счёта)
75 | void resume(); // продолжить (без сброса счёта)
76 |
77 | // служебное
78 | void setMode(boolean mode); // установка режима работы вручную: AUTO или MANUAL (TIMER_INTERVAL / TIMER_TIMEOUT)
79 | ```
80 |
81 |
82 | ## Пример
83 | Остальные примеры смотри в **examples**!
84 | ```cpp
85 | #include "GyverTimer.h"
86 | GTimer myTimer(MS); // создать миллисекундный таймер
87 |
88 | void setup() {
89 | Serial.begin(9600);
90 | myTimer.setInterval(500); // настроить интервал
91 | }
92 |
93 | void loop() {
94 | if (myTimer.isReady()) Serial.println("Timer!");
95 | }
96 | ```
97 |
98 |
99 | ## Версии
100 | - v2.0 - улучшенный алгоритм работы таймера
101 | - Кратные интервалы
102 | - Защита от пропусков
103 | - Защита от переполнения millis()
104 | - Убраны дефайны
105 | - v2.1 - возвращены дефайны
106 | - v2.2 - улучшена стабильность
107 | - v3.0
108 | - Логика работы разделена на интервал и таймаут
109 | - Добавлен общий класс GTimer (для миллисекундного и микросекундного таймера)
110 | - Добавлена возможность остановить и продолжить счёт таймера
111 | - v3.2
112 | - Добавлен isEnabled
113 | - Возможность не запускать таймер при создании
114 |
115 |
116 | ## Баги и обратная связь
117 | При нахождении багов создавайте **Issue**, а лучше сразу пишите на почту [alex@alexgyver.ru](mailto:alex@alexgyver.ru)
118 | Библиотека открыта для доработки и ваших **Pull Request**'ов!
119 |
120 |
121 | При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
122 | - Версия библиотеки
123 | - Какой используется МК
124 | - Версия SDK (для ESP)
125 | - Версия Arduino IDE
126 | - Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
127 | - Какой код загружался, какая работа от него ожидалась и как он работает в реальности
128 | - В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код
129 |
--------------------------------------------------------------------------------
/README_EN.md:
--------------------------------------------------------------------------------
1 | This is an automatic translation, may be incorrect in some places. See sources and examples!
2 |
3 | # Gyvertimer
4 | Millis () / Micros ()
5 | ** Attention, the library is outdated!Use [Timerms] (https://github.com/gyverlibs/timerms) **
6 | - millisecond and microsecond timer
7 | - Two operating modes:
8 | - interval mode: Timer "triggers" every given time interval
9 | - Tymauta mode: The timer "triggers" once after the time (until the next restart)
10 | - Office functions:
11 | - Start
12 | - Stop
13 | - Reset
14 | - Continue
15 |
16 | ## compatibility
17 | Compatible with all arduino platforms (used arduino functions)
18 |
19 | ### Documentation
20 | There is [expanded documentation] to the library (https://alexgyver.ru/gyvertimer/)
21 |
22 | ## Content
23 | - [installation] (# Install)
24 | - [initialization] (#init)
25 | - [use] (#usage)
26 | - [Example] (# Example)
27 | - [versions] (#varsions)
28 | - [bugs and feedback] (#fedback)
29 |
30 |
31 | ## Installation
32 | - The library can be found by the name ** gyvertimer ** and installed through the library manager in:
33 | - Arduino ide
34 | - Arduino ide v2
35 | - Platformio
36 | - [download the library] (https://github.com/gyverlibs/gyvertimer/archive/refs/heads/main.zip). Zip archive for manual installation:
37 | - unpack and put in * C: \ Program Files (X86) \ Arduino \ Libraries * (Windows X64)
38 | - unpack and put in * C: \ Program Files \ Arduino \ Libraries * (Windows X32)
39 | - unpack and put in *documents/arduino/libraries/ *
40 | - (Arduino id) Automatic installation from. Zip: * sketch/connect the library/add .Zip library ... * and specify downloaded archive
41 | - Read more detailed instructions for installing libraries [here] (https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%BD%D0%BE%BE%BE%BED0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA)
42 | ### Update
43 | - I recommend always updating the library: errors and bugs are corrected in the new versions, as well as optimization and new features are added
44 | - through the IDE library manager: find the library how to install and click "update"
45 | - Manually: ** remove the folder with the old version **, and then put a new one in its place.“Replacement” cannot be done: sometimes in new versions, files that remain when replacing are deleted and can lead to errors!
46 |
47 |
48 |
49 | ## initialization
50 | `` `CPP
51 | // Mode: MS/US
52 | Gtimer mytimer (mode);
53 | Gtimer mytimer (Mode, Interval);
54 | `` `
55 |
56 |
57 | ## Usage
58 | `` `CPP
59 | VOID SetinTerval (Uint32_T Interval);// Installation of the interval of the timer (also launch and drop the timer) - interval mode
60 | VOID settimeout (uint32_t timeout);// Installation of the timer timer (will also launch and drop the timer) - Timout mode
61 | Boolean Isready ();// Returns True when the time has come
62 | Boolean Isenabled ();// Return the condition of the timer (stopped/launched)
63 | VOID Reset ();// Tiemer resetting to the established period of work
64 | VOID Start ();// Launch/restart (with account reset)
65 | VOID Stop ();// Stop the timer (without resetting)
66 | VOID Resume ();// Continue (without resetting)
67 |
68 | // Office
69 | VOID setmode (Boolean Mode);// Installation of the operating mode manually: Auto or Manual (Timer_Interval / Timer_timeout)
70 | `` `
71 |
72 |
73 | ## Example
74 | The rest of the examples look at ** Examples **!
75 | ```CPP
76 | #include "gyvertimer.h"
77 | Gtimer mytimer (MS);// Create a millisecond timer
78 |
79 | VOID setup () {
80 | Serial.Begin (9600);
81 | Mytimer.SetinTERVAL (500);// configure the interval
82 | }
83 |
84 | VOID loop () {
85 | if (mytimer.isread ()) serial.println ("Timer!");
86 | }
87 | `` `
88 |
89 |
90 | ## versions
91 | - V2.0 - an improved timer operation algorithm
92 | - multiple intervals
93 | - Protection against passes
94 | - Protection from overflow Millis ()
95 | - Defaine removed
96 | - V2.1 - Defaines returned
97 | - V2.2 - Improved stability
98 | - V3.0
99 | - The logic of work is divided into interval and timaut
100 | - added the general class GTimer (for millisecond and microsecond timer)
101 | - Added the ability to stop and continue the timer account
102 | - V3.2
103 | - Added isenabled
104 | - the opportunity not to launch a timer when creating
105 |
106 |
107 | ## bugs and feedback
108 | Create ** Issue ** when you find the bugs, and better immediately write to the mail [alex@alexgyver.ru] (mailto: alex@alexgyver.ru)
109 | The library is open for refinement and your ** pull Request ** 'ow!
110 |
111 |
112 | When reporting about bugs or incorrect work of the library, it is necessary to indicate:
113 | - The version of the library
114 | - What is MK used
115 | - SDK version (for ESP)
116 | - version of Arduino ide
117 | - whether the built -in examples work correctly, in which the functions and designs are used, leading to a bug in your code
118 | - what code has been loaded, what work was expected from it and how it works in reality
119 | - Ideally, attach the minimum code in which the bug is observed.Not a canvas of a thousand lines, but a minimum code
--------------------------------------------------------------------------------
/examples/GTimer/GTimer.ino:
--------------------------------------------------------------------------------
1 | #include "GyverTimer.h"
2 | GTimer myTimer(MS); // создать миллисекундный таймер
3 |
4 | void setup() {
5 | Serial.begin(9600);
6 | myTimer.setInterval(500); // настроить интервал
7 | }
8 |
9 | void loop() {
10 | if (myTimer.isReady()) Serial.println("Timer!");
11 | }
12 |
--------------------------------------------------------------------------------
/examples/GTimer_button/GTimer_button.ino:
--------------------------------------------------------------------------------
1 | // пример с кнопкой, кнопка сбрасывает таймер
2 |
3 | #include // библиотека кнопки
4 | GButton btn(3); // кнопка на D3
5 |
6 | #include "GyverTimer.h" // библиотека таймера
7 | GTimer myTimer(MS); // создать таймер (по умолч. в режиме интервала)
8 |
9 | void setup() {
10 | Serial.begin(9600);
11 | myTimer.setTimeout(1000); // запуск в режиме таймаута 1 секунда
12 | }
13 |
14 | void loop() {
15 | btn.tick(); // опрос кнопки
16 | // при нажатии кнопки задаём таймаут 1 секунду
17 | if (btn.isClick()) myTimer.setTimeout(1000);
18 |
19 | // через секунду после последнего нажатия выведет Timeout!
20 | if (myTimer.isReady()) Serial.println("Timeout!");
21 | }
22 |
--------------------------------------------------------------------------------
/examples/GTimer_demo/GTimer_demo.ino:
--------------------------------------------------------------------------------
1 | // пример работы в режиме интервалов
2 |
3 | #include "GyverTimer.h" // подключаем библиотеку
4 |
5 | GTimer myTimer(MS); // создать миллисекундный таймер (ms) (по умолч. в режиме интервала)
6 | //GTimer myTimer(MS, 1000); // можно сразу указать период (по умолч. в режиме интервала)
7 | //GTimer myTimer(US, 5000); // или микросекундный (us), на 5000 мкс (по умолч. в режиме интервала)
8 |
9 | // без указания периода таймер автоматически не запустится!
10 |
11 | void setup() {
12 | Serial.begin(9600);
13 | myTimer.setInterval(500); // запуск в режиме интервала 500 мс
14 |
15 | // myTimer.stop(); // "остановить" таймер
16 | // myTimer.start(); // запустить (перезапустить) таймер
17 | // myTimer.reset(); // сбросить период
18 | // myTimer.resume(); // продолжить работу после stop
19 | }
20 |
21 | void loop() {
22 | if (myTimer.isReady()) Serial.println("Timer!"); // 2 раза в секунду
23 | }
24 |
--------------------------------------------------------------------------------
/examples/GTimer_manual/GTimer_manual.ino:
--------------------------------------------------------------------------------
1 | /*
2 | Пример работы в ручном режиме (отложенный пуск)
3 | */
4 |
5 | #include "GyverTimer.h"
6 | GTimer myTimer(MS); // создать таймер
7 |
8 | void setup() {
9 | Serial.begin(9600);
10 | myTimer.setInterval(5000); // настроить интервал 5 сек
11 | myTimer.setMode(MANUAL); // ручной режим
12 | Serial.println("Start");
13 | Serial.println("Wait 5 sec");
14 | }
15 |
16 | void loop() {
17 | if (myTimer.isReady()) Serial.println("Timer!");
18 | }
19 |
--------------------------------------------------------------------------------
/examples/GTimer_multiple/GTimer_multiple.ino:
--------------------------------------------------------------------------------
1 | // пример параллельной работы нескольких таймеров
2 |
3 | #include "GyverTimer.h" // подключаем библиотеку
4 |
5 | // создаём таймеры в миллисекундах
6 | GTimer myTimer1(MS, 500);
7 | GTimer myTimer2(MS, 600);
8 | GTimer myTimer3(MS, 1000);
9 |
10 | void setup() {
11 | Serial.begin(9600);
12 | }
13 |
14 | void loop() {
15 | if (myTimer1.isReady())
16 | Serial.println("Timer 1!");
17 |
18 | if (myTimer2.isReady())
19 | Serial.println("Timer 2!");
20 |
21 | if (myTimer3.isReady())
22 | Serial.println("Timer 3!");
23 | }
24 |
--------------------------------------------------------------------------------
/examples/GTimer_timeout/GTimer_timeout.ino:
--------------------------------------------------------------------------------
1 | // Пример работы в режиме таймаута
2 |
3 | #include "GyverTimer.h" // подключаем библиотеку
4 |
5 | GTimer myTimer(MS); // создать миллисекундный таймер
6 | //GTimer myTimer(US); // US - микросекундный
7 |
8 | void setup() {
9 | Serial.begin(9600);
10 | myTimer.setTimeout(3000); // настроить таймаут 3 сек
11 | Serial.println("Start");
12 | }
13 |
14 | void loop() {
15 | // выведет Timeout 3 sec! через 3 секунды после вызова setTimeout(3000)
16 | if (myTimer.isReady()) Serial.println("Timeout 3 sec!");
17 |
18 | // после срабатывания остановит счёт
19 | // можно перезапустить при помощи setTimeout(время) или start()
20 | }
21 |
--------------------------------------------------------------------------------
/examples/GTimer_timeoutContinue/GTimer_timeoutContinue.ino:
--------------------------------------------------------------------------------
1 | // Пример работы в режиме таймаута
2 |
3 | #include "GyverTimer.h" // подключаем библиотеку
4 |
5 | GTimer myTimer(MS); // создать миллисекундный таймер
6 | //GTimer myTimer(US); // US - микросекундный
7 |
8 | void setup() {
9 | Serial.begin(9600);
10 | myTimer.setTimeout(3000); // настроить таймаут 3 сек
11 | Serial.println("Start");
12 | }
13 |
14 | void loop() {
15 | // выведет Timeout 3 sec! через 3 секунды после вызова setTimeout(3000)
16 | // и будет выводить постоянно вплоть ДО ПЕРЕЗАПУСКА ТАЙМЕРА
17 | if (myTimer.isReady() || !myTimer.isEnabled()) Serial.println("Timeout 3 sec!");
18 |
19 | // после срабатывания остановит счёт
20 | // можно перезапустить при помощи setTimeout(время) или start()
21 | }
22 |
--------------------------------------------------------------------------------
/examples/GTimer_us/GTimer_us.ino:
--------------------------------------------------------------------------------
1 | // пример с таймером на micros
2 |
3 | #include "GyverTimer.h"
4 | GTimer myTimer(US, 1500); // создать таймер 1500 мкс = 1,5 миллисекунды
5 |
6 | void setup() {
7 | Serial.begin(9600);
8 | }
9 |
10 | void loop() {
11 | if (myTimer.isReady()) Serial.println("Timer!");
12 | }
--------------------------------------------------------------------------------
/examples/Old_examples/GTimer/GTimer.ino:
--------------------------------------------------------------------------------
1 | #include "GyverTimer.h"
2 | GTimer_ms myTimer; // создать таймер
3 |
4 | void setup() {
5 | Serial.begin(9600);
6 | myTimer.setInterval(500); // настроить интервал
7 | }
8 |
9 | void loop() {
10 | if (myTimer.isReady()) Serial.println("Timer!");
11 | }
12 |
--------------------------------------------------------------------------------
/examples/Old_examples/GTimer_manual/GTimer_manual.ino:
--------------------------------------------------------------------------------
1 | /*
2 | Пример работы в ручном режиме (отложенный пуск)
3 | */
4 |
5 | #include "GyverTimer.h"
6 | GTimer_ms myTimer; // создать таймер
7 |
8 | void setup() {
9 | Serial.begin(9600);
10 | myTimer.setInterval(5000); // настроить интервал 5 сек
11 | myTimer.setMode(MANUAL); // ручной режим
12 | Serial.println("Start");
13 | Serial.println("Wait 5 sec");
14 | }
15 |
16 | void loop() {
17 | if (myTimer.isReady()) Serial.println("Timer!");
18 | }
19 |
--------------------------------------------------------------------------------
/examples/Old_examples/GTimer_multiple/GTimer_multiple.ino:
--------------------------------------------------------------------------------
1 | #include "GyverTimer.h"
2 |
3 | // создать таймер, в скобках период в миллисекундах
4 | GTimer_ms myTimer1(500);
5 | GTimer_ms myTimer2(600);
6 | GTimer_ms myTimer3(1000);
7 |
8 | void setup() {
9 | Serial.begin(9600);
10 | }
11 |
12 | void loop() {
13 | if (myTimer1.isReady())
14 | Serial.println("Timer 1!");
15 |
16 | if (myTimer2.isReady())
17 | Serial.println("Timer 2!");
18 |
19 | if (myTimer3.isReady())
20 | Serial.println("Timer 3!");
21 | }
22 |
--------------------------------------------------------------------------------
/examples/Old_examples/GTimer_us/GTimer_us.ino:
--------------------------------------------------------------------------------
1 | // пример с таймером на micros
2 |
3 | #include "GyverTimer.h"
4 | GTimer_us myTimer(1500); // создать таймер 1500 мкс = 1,5 миллисекунды
5 |
6 | void setup() {
7 | Serial.begin(9600);
8 | }
9 |
10 | void loop() {
11 | if (myTimer.isReady()) Serial.println("Timer!");
12 | }
--------------------------------------------------------------------------------
/examples/Old_examples/Screenshot_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GyverLibs/GyverTimer/4f8c6c4df0aeff9991c19f4c0798c56530a79886/examples/Old_examples/Screenshot_2.jpg
--------------------------------------------------------------------------------
/examples/Screenshot_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GyverLibs/GyverTimer/4f8c6c4df0aeff9991c19f4c0798c56530a79886/examples/Screenshot_2.jpg
--------------------------------------------------------------------------------
/examples/stop_resume/stop_resume.ino:
--------------------------------------------------------------------------------
1 | // пример с кнопкой, которая приостанавливает таймер
2 |
3 | #include // библиотека кнопки
4 | GButton btn(3); // кнопка на D3
5 |
6 | #include "GyverTimer.h" // библиотека таймера
7 | GTimer myTimer(MS); // создать таймер (по умолч. в режиме интервала)
8 |
9 | void setup() {
10 | Serial.begin(9600);
11 | myTimer.setInterval(5000); // запуск в режиме таймаута 5 секунд
12 | }
13 |
14 | void loop() {
15 | btn.tick(); // опрос кнопки
16 |
17 | // при нажатии кнопки останавливаем и продолжаем таймер
18 | if (btn.isClick()) {
19 | static bool flag = false;
20 | flag = !flag;
21 | if (flag) myTimer.stop();
22 | else myTimer.resume();
23 | }
24 |
25 | // оповещение о таймауте
26 | if (myTimer.isReady()) Serial.println("Timeout!");
27 | }
28 |
--------------------------------------------------------------------------------
/keywords.txt:
--------------------------------------------------------------------------------
1 | #######################################
2 | # Syntax Coloring Map For GyverTimer
3 | #######################################
4 |
5 | #######################################
6 | # Datatypes (KEYWORD1)
7 | #######################################
8 |
9 | GTimer KEYWORD1
10 | GTimer_ms KEYWORD1
11 | GTimer_us KEYWORD1
12 | GyverTimer KEYWORD1
13 |
14 | #######################################
15 | # Methods and Functions (KEYWORD2)
16 | #######################################
17 |
18 | setInterval KEYWORD2
19 | setTimeout KEYWORD2
20 | isReady KEYWORD2
21 | isEnabled KEYWORD2
22 | reset KEYWORD2
23 | setMode KEYWORD2
24 | start KEYWORD2
25 | stop KEYWORD2
26 | resume KEYWORD2
27 |
28 | #######################################
29 | # Constants (LITERAL1)
30 | #######################################
31 |
32 | AUTO LITERAL1
33 | MANUAL LITERAL1
34 | TIMER_TIMEOUT LITERAL1
35 | TIMER_INTERVAL LITERAL1
36 | MS LITERAL1
37 | US LITERAL1
--------------------------------------------------------------------------------
/library.properties:
--------------------------------------------------------------------------------
1 | name=GyverTimer
2 | version=3.2
3 | author=AlexGyver
4 | maintainer=AlexGyver
5 | sentence=Simple timer with period/timeout modes on millis
6 | paragraph=Simple timer with period/timeout modes on millis
7 | category=Timing
8 | url=https://github.com/GyverLibs/GyverTimer
9 | architectures=*
--------------------------------------------------------------------------------
/src/GyverTimer.cpp:
--------------------------------------------------------------------------------
1 | #include "GyverTimer.h"
2 |
3 | // конструктор
4 | GTimer::GTimer(timerType type, uint32_t interval) {
5 | setInterval(interval); // запуск в режиме ИНТЕРВАЛА
6 | _type = type; // установка типа
7 | }
8 |
9 | // запуск в режиме интервала
10 | void GTimer::setInterval(uint32_t interval) {
11 | if (interval != 0) { // защита от ввода 0
12 | _interval = interval; // установка
13 | _mode = TIMER_INTERVAL; // режим "интервал"
14 | start(); // сброс и запуск
15 | } else stop(); // остановка, если время == 0
16 | }
17 |
18 | // запуск в режиме таймаута
19 | void GTimer::setTimeout(uint32_t timeout) {
20 | setInterval(timeout); // задать интервал и запустить
21 | _mode = TIMER_TIMEOUT; // режим "таймаут"
22 | }
23 |
24 | // остановить счёт
25 | void GTimer::stop() {
26 | _state = false;
27 | _resumeBuffer = ( (_type) ? millis() : micros() ) - _timer; // запомнили "время остановки"
28 | }
29 |
30 | // продолжить счёт
31 | void GTimer::resume() {
32 | start();
33 | _timer -= _resumeBuffer; // восстановили время остановки
34 | }
35 |
36 | // перезапустить счёт
37 | void GTimer::start() {
38 | _state = true;
39 | reset();
40 | }
41 |
42 | // сброс периода
43 | void GTimer::reset() {
44 | _timer = (_type) ? millis() : micros();
45 | }
46 |
47 | // состояние
48 | boolean GTimer::isEnabled() {
49 | return _state;
50 | }
51 |
52 | // проверка таймера v2.0 (соблюдение интервалов, защита от пропуска и переполнения)
53 | boolean GTimer::isReady() {
54 | if (!_state) return false; // если таймер остановлен
55 | uint32_t thisTime = (_type) ? millis() : micros(); // текущее время
56 | if (thisTime - _timer >= _interval) { // проверка времени
57 | if (_mode) { // если режим интервалов
58 | do {
59 | _timer += _interval;
60 | if (_timer < _interval) break; // защита от переполнения uint32_t
61 | } while (_timer < thisTime - _interval); // защита от пропуска шага
62 | } else { // если режим таймаута
63 | _state = false; // остановить таймер
64 | }
65 | return true;
66 | } else {
67 | return false;
68 | }
69 | }
70 |
71 | // сменить режим вручную
72 | void GTimer::setMode(boolean mode) {
73 | _mode = mode;
74 | }
75 |
76 | // ================== УСТАРЕЛО (но работает, для совместимости) ===================
77 |
78 | // ====== millis ======
79 | GTimer_ms::GTimer_ms() {}
80 |
81 | GTimer_ms::GTimer_ms(uint32_t interval) {
82 | _interval = (interval == 0) ? 1 : interval; // защита от ввода 0
83 | reset();
84 | }
85 |
86 | void GTimer_ms::setInterval(uint32_t interval) {
87 | _interval = (interval == 0) ? 1 : interval; // защита от ввода 0
88 | GTimer_ms::reset();
89 | _state = true;
90 | _mode = true;
91 | }
92 | void GTimer_ms::setTimeout(uint32_t interval) {
93 | setInterval(interval);
94 | _mode = false;
95 | }
96 | void GTimer_ms::setMode(uint8_t mode) {
97 | _mode = mode;
98 | }
99 | void GTimer_ms::start() {
100 | _state = true;
101 | }
102 | void GTimer_ms::stop() {
103 | _state = false;
104 | }
105 | boolean GTimer_ms::isReady() {
106 | if (!_state) return false;
107 | uint32_t thisMls = millis();
108 | if (thisMls - _timer >= _interval) {
109 | if (_mode) {
110 | do {
111 | _timer += _interval;
112 | if (_timer < _interval) break; // переполнение uint32_t
113 | } while (_timer < thisMls - _interval); // защита от пропуска шага
114 | } else {
115 | _state = false;
116 | }
117 | return true;
118 | } else {
119 | return false;
120 | }
121 | }
122 |
123 | void GTimer_ms::reset() {
124 | _timer = millis();
125 | }
126 |
127 | // ====== micros ======
128 | GTimer_us::GTimer_us() {}
129 |
130 | GTimer_us::GTimer_us(uint32_t interval) {
131 | _interval = (interval == 0) ? 1 : interval; // защита от ввода 0
132 | reset();
133 | }
134 |
135 | void GTimer_us::setInterval(uint32_t interval) {
136 | _interval = (interval == 0) ? 1 : interval; // защита от ввода 0
137 | GTimer_us::reset();
138 | _state = true;
139 | _mode = true;
140 | }
141 | void GTimer_us::setTimeout(uint32_t interval) {
142 | setInterval(interval);
143 | _mode = false;
144 | }
145 | void GTimer_us::setMode(uint8_t mode) {
146 | _mode = mode;
147 | }
148 | void GTimer_us::start() {
149 | _state = true;
150 | }
151 | void GTimer_us::stop() {
152 | _state = false;
153 | }
154 | boolean GTimer_us::isReady() {
155 | if (!_state) return false;
156 | uint32_t thisUs = micros();
157 | if (thisUs - _timer >= _interval) {
158 | if (_mode) {
159 | do {
160 | _timer += _interval;
161 | if (_timer < _interval) break; // переполнение uint32_t
162 | } while (_timer < thisUs - _interval); // защита от пропуска шага
163 | } else {
164 | _state = false;
165 | }
166 | return true;
167 | } else {
168 | return false;
169 | }
170 | }
171 |
172 | void GTimer_us::reset() {
173 | _timer = micros();
174 | }
--------------------------------------------------------------------------------
/src/GyverTimer.h:
--------------------------------------------------------------------------------
1 | /*
2 | GTimer - полноценный таймер на базе системных millis() / micros()
3 | ВНИМАНИЕ, БИБЛИОТЕКА УСТАРЕЛА! ИСПОЛЬЗУЙ TimerMs https://github.com/GyverLibs/TimerMs
4 | Документация: https://alexgyver.ru/gyvertimer/
5 | GitHub: https://github.com/GyverLibs/GyverTimer
6 | Возможности:
7 | - Миллисекундный и микросекундный таймер
8 | - Два режима работы:
9 | - Режим интервала: таймер "срабатывает" каждый заданный интервал времени
10 | - Режим таймаута: таймер "срабатывает" один раз по истечении времени (до следующего перезапуска)
11 | - Служебные функции:
12 | - Старт
13 | - Стоп
14 | - Сброс
15 | - Продолжить
16 |
17 | AlexGyver, alex@alexgyver.ru
18 | https://alexgyver.ru/
19 | MIT License
20 |
21 | Версии:
22 | v2.0 - улучшенный алгоритм работы таймера
23 | - Кратные интервалы
24 | - Защита от пропусков
25 | - Защита от переполнения millis()
26 | - Убраны дефайны
27 | v2.1 - возвращены дефайны
28 | v2.2 - улучшена стабильность
29 | v3.0
30 | - Логика работы разделена на интервал и таймаут
31 | - Добавлен общий класс GTimer (для миллисекундного и микросекундного таймера)
32 | - Добавлена возможность остановить и продолжить счёт таймера
33 | v3.2
34 | - Добавлен isEnabled
35 | - Возможность не запускать таймер при создании
36 | */
37 |
38 | #ifndef GyverTimer_h
39 | #define GyverTimer_h
40 | #include
41 | enum timerType {
42 | US,
43 | MS,
44 | };
45 |
46 | // ============== GTimer (микросекундный и миллисекундный таймер) ================
47 | class GTimer {
48 | public:
49 | GTimer(timerType type = MS, uint32_t interval = 0); // объявление таймера с указанием типа и интервала (таймер не запущен, если не указывать)
50 | void setInterval(uint32_t interval); // установка интервала работы таймера (также запустит и сбросит таймер) - режим интервала
51 | void setTimeout(uint32_t timeout); // установка таймаута работы таймера (также запустит и сбросит таймер) - режим таймаута
52 | boolean isReady(); // возвращает true, когда пришло время
53 | boolean isEnabled(); // вернуть состояние таймера (остановлен/запущен)
54 | void reset(); // сброс таймера на установленный период работы
55 | void start(); // запустить/перезапустить (со сбросом счёта)
56 | void stop(); // остановить таймер (без сброса счёта)
57 | void resume(); // продолжить (без сброса счёта)
58 |
59 | // служебное
60 | void setMode(boolean mode); // установка режима работы вручную: AUTO или MANUAL (TIMER_INTERVAL / TIMER_TIMEOUT)
61 |
62 | private:
63 | uint32_t _timer = 0;
64 | uint32_t _interval = 0;
65 | uint32_t _resumeBuffer = 0;
66 | boolean _mode = true;
67 | boolean _state = false;
68 | boolean _type = true;
69 | };
70 |
71 | #define MANUAL 0
72 | #define AUTO 1
73 | #define TIMER_TIMEOUT 0
74 | #define TIMER_INTERVAL 1
75 |
76 |
77 | // ================================================================================
78 | // ================== УСТАРЕЛО (но работает, для совместимости) ===================
79 | // ================================================================================
80 | class GTimer_ms {
81 | public:
82 | GTimer_ms(); // объявление таймера (МИЛЛИСЕКУНДНЫЙ)
83 | GTimer_ms(uint32_t interval); // объявление таймера с указанием интервала
84 | void setInterval(uint32_t interval); // установка интервала работы таймера (также запустит таймер и сбросит период) - режим авто
85 | void setTimeout(uint32_t interval); // установка таймаута работы таймера (также запустит таймер и сбросит период) - режим ручной
86 | void setMode(uint8_t mode); // установка типа работы: AUTO или MANUAL (MANUAL нужно вручную сбрасывать reset или setInterval/setTimeout)
87 | boolean isReady(); // возвращает true, когда пришло время
88 | void reset(); // ручной сброс таймера на установленный период работы
89 | void stop(); // остановить таймер (без сброса счёта)
90 | void start(); // продолжить (без сброса счёта)
91 |
92 | private:
93 | uint32_t _timer = 0;
94 | uint32_t _interval = 1000;
95 | boolean _mode = true;
96 | boolean _state = true;
97 | };
98 |
99 | class GTimer_us {
100 | public:
101 | GTimer_us(); // объявление таймера (МИКРОСЕКУНДНЫЙ)
102 | GTimer_us(uint32_t interval); // объявление таймера с указанием интервала
103 | void setInterval(uint32_t interval); // установка интервала работы таймера (также запустит таймер и сбросит период) - режим авто
104 | void setTimeout(uint32_t interval); // установка таймаута работы таймера (также запустит таймер и сбросит период) - режим ручной
105 | void setMode(uint8_t mode); // установка типа работы: AUTO или MANUAL (MANUAL нужно вручную сбрасывать reset или setInterval/setTimeout)
106 | boolean isReady(); // возвращает true, когда пришло время
107 | void reset(); // ручной сброс таймера на установленный интервал
108 | void stop(); // остановить таймер (без сброса счёта)
109 | void start(); // продолжить (без сброса счёта)
110 |
111 | private:
112 | uint32_t _timer = 0;
113 | uint32_t _interval = 1000;
114 | boolean _mode = true;
115 | boolean _state = true;
116 | };
117 | #endif
--------------------------------------------------------------------------------