Skip to content
This repository was archived by the owner on Jan 29, 2023. It is now read-only.

Commit 8f4dd64

Browse files
authored
v1.1.0 to modify PWM settings on-the-fly
### Releases v1.1.0 1. Add functions to modify PWM settings on-the-fly 2. Add example to demo how to modify PWM settings on-the-fly
1 parent edec367 commit 8f4dd64

23 files changed

+745
-125
lines changed

CONTRIBUTING.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ If you don't find anything, please [open a new issue](https://github.com/khoih-p
1515
Please ensure to specify the following:
1616

1717
* Arduino IDE version (e.g. 1.8.16) or Platform.io version
18-
* `STM32` Core Version (e.g. STM32 core v2.0.0)
18+
* `STM32` Core Version (e.g. STM32 core v2.1.0)
1919
* Board type and relevant info
2020
* Contextual information (e.g. what you were trying to achieve)
2121
* Simplest possible steps to reproduce
@@ -28,10 +28,10 @@ Please ensure to specify the following:
2828

2929
```
3030
Arduino IDE version: 1.8.16
31-
STM32 Core Version 2.0.0
31+
STM32 Core Version 2.1.0
3232
Nucleo-144 STM32H7 NUCLEO_H743ZI2
3333
OS: Ubuntu 20.04 LTS
34-
Linux xy-Inspiron-3593 5.4.0-86-generic #97-Ubuntu SMP Fri Sep 17 19:19:40 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
34+
Linux xy-Inspiron-3593 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
3535
3636
Context:
3737
I encountered a crash while using TimerInterrupt.

README.md

+70-18
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,19 @@
2828
* [1. Init Hardware Timer](#1-init-hardware-timer)
2929
* [2. Set PWM Frequency, dutycycle, attach irqCallbackStartFunc and irqCallbackStopFunc functions](#2-Set-PWM-Frequency-dutycycle-attach-irqCallbackStartFunc-and-irqCallbackStopFunc-functions)
3030
* [Examples](#examples)
31-
* [ 1. ISR_16_PWMs_Array](examples/ISR_16_PWMs_Array)
32-
* [ 2. ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex)
33-
* [ 3. ISR_16_PWMs_Array_Simple](examples/ISR_16_PWMs_Array_Simple)
31+
* [ 1. ISR_16_PWMs_Array](examples/ISR_16_PWMs_Array)
32+
* [ 2. ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex)
33+
* [ 3. ISR_16_PWMs_Array_Simple](examples/ISR_16_PWMs_Array_Simple)
34+
* [ 4. ISR_Changing_PWM](examples/ISR_Changing_PWM)
35+
* [ 5. ISR_Modify_PWM](examples/ISR_Modify_PWM)
3436
* [Example ISR_16_PWMs_Array_Complex](#Example-ISR_16_PWMs_Array_Complex)
3537
* [Debug Terminal Output Samples](#debug-terminal-output-samples)
3638
* [1. ISR_16_PWMs_Array_Complex on NUCLEO_H743ZI2](#1-ISR_16_PWMs_Array_Complex-on-NUCLEO_H743ZI2)
3739
* [2. ISR_16_PWMs_Array_Complex on NUCLEO_F767ZI](#2-ISR_16_PWMs_Array_Complex-on-NUCLEO_F767ZI)
3840
* [3. ISR_16_PWMs_Array_Complex on NUCLEO_L552ZE_Q](#3-ISR_16_PWMs_Array_Complex-on-NUCLEO_L552ZE_Q)
3941
* [4. ISR_16_PWMs_Array_Complex on BLUEPILL_F103CB](#4-ISR_16_PWMs_Array_Complex-on-BLUEPILL_F103CB)
42+
* [5. ISR_Modify_PWM on NUCLEO_F767ZI](#5-ISR_Modify_PWM-on-NUCLEO_F767ZI)
43+
* [6. ISR_Changing_PWM on NUCLEO_F767ZI](#6-ISR_Changing_PWM-on-NUCLEO_F767ZI)
4044
* [Debug](#debug)
4145
* [Troubleshooting](#troubleshooting)
4246
* [Issues](#issues)
@@ -54,7 +58,7 @@
5458

5559
### Features
5660

57-
This library enables you to use Hardware Timers on **STM32F/L/H/G/WB/MP1 boards** such as NUCLEO_H743ZI2, NUCLEO_L552ZE_Q, NUCLEO_F767ZI, BLUEPILL_F103CB, etc., to create and output PWM to pins. Because this library doesn't use the powerful hardware-controlled PWM with limitations, the maximum PWM frequency is currently limited at **1000Hz**, which is suitable for many real-life applications.
61+
This library enables you to use Hardware Timers on **STM32F/L/H/G/WB/MP1 boards** such as NUCLEO_H743ZI2, NUCLEO_L552ZE_Q, NUCLEO_F767ZI, BLUEPILL_F103CB, etc., to create and output PWM to pins. Because this library doesn't use the powerful hardware-controlled PWM with limitations, the maximum PWM frequency is currently limited at **1000Hz**, which is suitable for many real-life applications. Now you can also modify PWM settings on-the-fly.
5862

5963
---
6064

@@ -115,7 +119,7 @@ The catch is **your function is now part of an ISR (Interrupt Service Routine),
115119
## Prerequisites
116120

117121
1. [`Arduino IDE 1.8.16+` for Arduino](https://www.arduino.cc/en/Main/Software)
118-
2. [`Arduino Core for STM32 v2.0.0+`](https://github.com/stm32duino/Arduino_Core_STM32) for STM32F/L/H/G/WB/MP1 boards. [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Core_STM32.svg)](https://github.com/stm32duino/Arduino_Core_STM32/releases/latest)
122+
2. [`Arduino Core for STM32 v2.1.0+`](https://github.com/stm32duino/Arduino_Core_STM32) for STM32F/L/H/G/WB/MP1 boards. [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Core_STM32.svg)](https://github.com/stm32duino/Arduino_Core_STM32/releases/latest)
119123

120124
3. To use with certain example
121125
- [`SimpleTimer library`](https://github.com/jfturcot/SimpleTimer) for [ISR_16_Timers_Array example](examples/ISR_16_Timers_Array).
@@ -346,7 +350,9 @@ void setup()
346350

347351
1. [ISR_16_PWMs_Array](examples/ISR_16_PWMs_Array)
348352
2. [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex)
349-
3. [ISR_16_PWMs_Array_Simple](examples/ISR_16_PWMs_Array_Simple)
353+
3. [ISR_16_PWMs_Array_Simple](examples/ISR_16_PWMs_Array_Simple)
354+
4. [ISR_Changing_PWM](examples/ISR_Changing_PWM)
355+
5. [ISR_Modify_PWM](examples/ISR_Modify_PWM)
350356

351357

352358
---
@@ -499,12 +505,11 @@ uint32_t PWM_Period[NUMBER_ISR_PWMS] =
499505
111111L, 100000L, 66667L, 50000L, 40000L, 33333L, 25000L, 20000L
500506
};
501507
502-
503508
// You can assign any interval for any timer here, in Hz
504-
uint32_t PWM_Freq[NUMBER_ISR_PWMS] =
509+
double PWM_Freq[NUMBER_ISR_PWMS] =
505510
{
506-
1, 2, 3, 4, 5, 6, 7, 8,
507-
9, 10, 15, 20, 25, 30, 40, 50
511+
1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
512+
9.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 40.0f, 50.0f
508513
};
509514
510515
// You can assign any interval for any timer here, in milliseconds
@@ -937,12 +942,12 @@ void loop()
937942

938943
### 1. ISR_16_PWMs_Array_Complex on NUCLEO_H743ZI2
939944

940-
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on NUCLEO_H743ZI2 to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
945+
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on **NUCLEO_H743ZI2** to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
941946

942947

943948
```
944949
Starting ISR_16_PWMs_Array_Complex on NUCLEO_H743ZI2
945-
STM32_SLOW_PWM v1.0.0
950+
STM32_SLOW_PWM v1.1.0
946951
[PWM] STM32TimerInterrupt: Timer Input Freq (Hz) = 240000000
947952
[PWM] Frequency = 1000000.00 , _count = 20
948953
Starting ITimer OK, micros() = 2015843
@@ -1002,12 +1007,12 @@ PWM Channel : 15, programmed Period (us): 20000, actual : 20000, programmed Duty
10021007

10031008
### 2. ISR_16_PWMs_Array_Complex on NUCLEO_F767ZI
10041009

1005-
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on NUCLEO_F767ZI to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
1010+
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on **NUCLEO_F767ZI** to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
10061011

10071012

10081013
```
10091014
Starting ISR_16_PWMs_Array_Complex on NUCLEO_F767ZI
1010-
STM32_SLOW_PWM v1.0.0
1015+
STM32_SLOW_PWM v1.1.0
10111016
[PWM] STM32TimerInterrupt: Timer Input Freq (Hz) = 216000000
10121017
[PWM] Frequency = 1000000.00 , _count = 20
10131018
Starting ITimer OK, micros() = 2015789
@@ -1067,12 +1072,12 @@ PWM Channel : 15, programmed Period (us): 20000, actual : 20000, programmed Duty
10671072

10681073
### 3. ISR_16_PWMs_Array_Complex on NUCLEO_L552ZE_Q
10691074

1070-
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on NUCLEO_L552ZE_Q to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
1075+
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on **NUCLEO_L552ZE_Q** to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
10711076

10721077

10731078
```
10741079
Starting ISR_16_PWMs_Array_Complex on NUCLEO_L552ZE_Q
1075-
STM32_SLOW_PWM v1.0.0
1080+
STM32_SLOW_PWM v1.1.0
10761081
[PWM] STM32TimerInterrupt: Timer Input Freq (Hz) = 110000000
10771082
[PWM] Frequency = 1000000.00 , _count = 20
10781083
Starting ITimer OK, micros() = 2016141
@@ -1132,12 +1137,12 @@ PWM Channel : 15, programmed Period (us): 20000, actual : 20000, programmed Duty
11321137

11331138
### 4. ISR_16_PWMs_Array_Complex on BLUEPILL_F103CB
11341139

1135-
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on BLUEPILL_F103CB to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
1140+
The following is the sample terminal output when running example [ISR_16_PWMs_Array_Complex](examples/ISR_16_PWMs_Array_Complex) on **BLUEPILL_F103CB** to demonstrate how to use multiple PWM channels with complex callback functions, the accuracy of ISR Hardware PWM-channels, **especially when system is very busy**. The ISR PWM-channels is **running exactly according to corresponding programmed periods and duty-cycles**
11361141

11371142

11381143
```
11391144
Starting ISR_16_PWMs_Array_Complex on BLUEPILL_F103CB
1140-
STM32_SLOW_PWM v1.0.0
1145+
STM32_SLOW_PWM v1.1.0
11411146
[PWM] STM32TimerInterrupt: Timer Input Freq (Hz) = 72000000
11421147
[PWM] Frequency = 1000000.00 , _count = 20
11431148
Starting ITimer OK, micros() = 3390333
@@ -1193,6 +1198,52 @@ PWM Channel : 14, programmed Period (us): 25000, actual : 24988, programmed Duty
11931198
PWM Channel : 15, programmed Period (us): 20000, actual : 19984, programmed DutyCycle : 95, actual : 95.00
11941199
```
11951200

1201+
---
1202+
1203+
### 5. ISR_Modify_PWM on NUCLEO_F767ZI
1204+
1205+
The following is the sample terminal output when running example [ISR_Modify_PWM](examples/ISR_Modify_PWM) on **NUCLEO_F767ZI** to demonstrate how to modify PWM settings on-the-fly without deleting the PWM channel
1206+
1207+
```
1208+
Starting ISR_Modify_PWM on NUCLEO_F767ZI
1209+
STM32_SLOW_PWM v1.1.0
1210+
[PWM] STM32TimerInterrupt: Timer Input Freq (Hz) = 216000000
1211+
[PWM] Frequency = 1000000.00 , _count = 20
1212+
Starting ITimer OK, micros() = 2010993
1213+
Using PWM Freq = 1.00, PWM DutyCycle = 10
1214+
Channel : 0 Period : 1000000 OnTime : 100000 Start_Time : 2016713
1215+
Channel : 0 Period : 500000 OnTime : 450000 Start_Time : 12028002
1216+
Channel : 0 Period : 1000000 OnTime : 100000 Start_Time : 22029002
1217+
Channel : 0 Period : 500000 OnTime : 450000 Start_Time : 32030001
1218+
Channel : 0 Period : 1000000 OnTime : 100000 Start_Time : 42031001
1219+
Channel : 0 Period : 500000 OnTime : 450000 Start_Time : 52032001
1220+
Channel : 0 Period : 1000000 OnTime : 100000 Start_Time : 62033001
1221+
Channel : 0 Period : 500000 OnTime : 450000 Start_Time : 72034001
1222+
Channel : 0 Period : 1000000 OnTime : 100000 Start_Time : 82035001
1223+
Channel : 0 Period : 500000 OnTime : 450000 Start_Time : 92036002
1224+
Channel : 0 Period : 1000000 OnTime : 100000 Start_Time : 102037001
1225+
```
1226+
1227+
---
1228+
1229+
### 6. ISR_Changing_PWM on NUCLEO_F767ZI
1230+
1231+
The following is the sample terminal output when running example [ISR_Changing_PWM](examples/ISR_Changing_PWM) on **NUCLEO_F767ZI** to demonstrate how to modify PWM settings on-the-fly by deleting the PWM channel and reinit the PWM channel
1232+
1233+
```
1234+
Starting ISR_Changing_PWM on NUCLEO_F767ZI
1235+
STM32_SLOW_PWM v1.1.0
1236+
[PWM] STM32TimerInterrupt: Timer Input Freq (Hz) = 216000000
1237+
[PWM] Frequency = 1000000.00 , _count = 20
1238+
Starting ITimer OK, micros() = 2010992
1239+
Using PWM Freq = 1.00, PWM DutyCycle = 50
1240+
Channel : 0 Period : 1000000 OnTime : 500000 Start_Time : 2022102
1241+
Using PWM Freq = 2.00, PWM DutyCycle = 90
1242+
Channel : 0 Period : 500000 OnTime : 450000 Start_Time : 12027024
1243+
Using PWM Freq = 1.00, PWM DutyCycle = 50
1244+
Channel : 0 Period : 1000000 OnTime : 500000 Start_Time : 22032024
1245+
```
1246+
11961247

11971248
---
11981249
---
@@ -1237,6 +1288,7 @@ Submit issues to: [STM32_Slow_PWM issues](https://github.com/khoih-prog/STM32_Sl
12371288

12381289
1. Basic hardware multi-channel PWM for **STM32F/L/H/G/WB/MP1 boards** such as NUCLEO_H743ZI2, NUCLEO_L552ZE_Q, NUCLEO_F767ZI, BLUEPILL_F103CB, etc., using [`Arduino Core for STM32`](https://github.com/stm32duino/Arduino_Core_STM32)
12391290
2. Add Table of Contents
1291+
3. Add functions to modify PWM settings on-the-fly
12401292

12411293
---
12421294
---

changelog.md

+6
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@
1212
## Table of Contents
1313

1414
* [Changelog](#changelog)
15+
* [Releases v1.1.0](#releases-v110)
1516
* [Initial Releases v1.0.0](#Initial-Releases-v100)
1617

1718
---
1819
---
1920

2021
## Changelog
2122

23+
### Releases v1.1.0
24+
25+
1. Add functions to modify PWM settings on-the-fly
26+
2. Add example to demo how to modify PWM settings on-the-fly
27+
2228
### Initial Releases v1.0.0
2329

2430
1. Initial coding to support **STM32F/L/H/G/WB/MP1 boards** such as NUCLEO_H743ZI2, NUCLEO_L552ZE_Q, NUCLEO_F767ZI, BLUEPILL_F103CB, etc., using [`Arduino Core for STM32`](https://github.com/stm32duino/Arduino_Core_STM32)

examples/ISR_16_PWMs_Array/ISR_16_PWMs_Array.ino

+4-11
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,14 @@
33
For F/L/H/G/WB/MP1 boards
44
Written by Khoi Hoang
55
6-
Built by Khoi Hoang https://github.com/khoih-prog/_Slow_PWM
6+
Built by Khoi Hoang https://github.com/khoih-prog/STM32_Slow_PWM
77
Licensed under MIT license
88
99
Now even you use all these new 16 ISR-based timers,with their maximum interval practically unlimited (limited only by
1010
unsigned long miliseconds), you just consume only one timer and avoid conflicting with other cores' tasks.
1111
The accuracy is nearly perfect compared to software timers. The most important feature is they're ISR-based timers
1212
Therefore, their executions are not blocked by bad-behaving functions / tasks.
1313
This important feature is absolutely necessary for mission-critical tasks.
14-
15-
Version: 1.0.0
16-
17-
Version Modified By Date Comments
18-
------- ----------- ---------- -----------
19-
1.0.0 K.Hoang 22/09/2021 Initial coding for F/L/H/G/WB/MP1
2014
*****************************************************************************************************************************/
2115

2216
#if !( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \
@@ -115,12 +109,11 @@ uint32_t PWM_Period[NUMBER_ISR_PWMS] =
115109
111111L, 100000L, 66667L, 50000L, 40000L, 33333L, 25000L, 20000L
116110
};
117111

118-
119112
// You can assign any interval for any timer here, in Hz
120-
uint32_t PWM_Freq[NUMBER_ISR_PWMS] =
113+
double PWM_Freq[NUMBER_ISR_PWMS] =
121114
{
122-
1, 2, 3, 4, 5, 6, 7, 8,
123-
9, 10, 15, 20, 25, 30, 40, 50
115+
1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
116+
9.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 40.0f, 50.0f
124117
};
125118

126119
// You can assign any interval for any timer here, in milliseconds

examples/ISR_16_PWMs_Array_Complex/ISR_16_PWMs_Array_Complex.ino

+3-10
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@
1111
The accuracy is nearly perfect compared to software timers. The most important feature is they're ISR-based timers
1212
Therefore, their executions are not blocked by bad-behaving functions / tasks.
1313
This important feature is absolutely necessary for mission-critical tasks.
14-
15-
Version: 1.0.0
16-
17-
Version Modified By Date Comments
18-
------- ----------- ---------- -----------
19-
1.0.0 K.Hoang 22/09/2021 Initial coding for STM32F/L/H/G/WB/MP1
2014
*****************************************************************************************************************************/
2115

2216
#if !( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \
@@ -163,12 +157,11 @@ uint32_t PWM_Period[NUMBER_ISR_PWMS] =
163157
111111L, 100000L, 66667L, 50000L, 40000L, 33333L, 25000L, 20000L
164158
};
165159

166-
167160
// You can assign any interval for any timer here, in Hz
168-
uint32_t PWM_Freq[NUMBER_ISR_PWMS] =
161+
double PWM_Freq[NUMBER_ISR_PWMS] =
169162
{
170-
1, 2, 3, 4, 5, 6, 7, 8,
171-
9, 10, 15, 20, 25, 30, 40, 50
163+
1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
164+
9.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 40.0f, 50.0f
172165
};
173166

174167
// You can assign any interval for any timer here, in milliseconds

examples/ISR_16_PWMs_Array_Simple/ISR_16_PWMs_Array_Simple.ino

+3-10
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@
1111
The accuracy is nearly perfect compared to software timers. The most important feature is they're ISR-based timers
1212
Therefore, their executions are not blocked by bad-behaving functions / tasks.
1313
This important feature is absolutely necessary for mission-critical tasks.
14-
15-
Version: 1.0.0
16-
17-
Version Modified By Date Comments
18-
------- ----------- ---------- -----------
19-
1.0.0 K.Hoang 22/09/2021 Initial coding for STM32F/L/H/G/WB/MP1
2014
*****************************************************************************************************************************/
2115

2216
#if !( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \
@@ -115,12 +109,11 @@ uint32_t PWM_Period[NUMBER_ISR_PWMS] =
115109
111111L, 100000L, 66667L, 50000L, 40000L, 33333L, 25000L, 20000L
116110
};
117111

118-
119112
// You can assign any interval for any timer here, in Hz
120-
uint32_t PWM_Freq[NUMBER_ISR_PWMS] =
113+
double PWM_Freq[NUMBER_ISR_PWMS] =
121114
{
122-
1, 2, 3, 4, 5, 6, 7, 8,
123-
9, 10, 15, 20, 25, 30, 40, 50
115+
1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
116+
9.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 40.0f, 50.0f
124117
};
125118

126119
// You can assign any interval for any timer here, in milliseconds

0 commit comments

Comments
 (0)