All notable changes to this project will be documented in this file starting 2021.
- fixing parameter missuse and potential crash
- Compiler warning removed
- Documentation
- CHANGELOG created.
- Many thanks to the improvements included from #27 (@aslobodyanuk), #59 (@ShaggyDog18) and #73 (@geeksville).
This is a major update with breaking changes.
The states are re-factored to support counting the clicks.
By design only one of the events (click, doubleClick, MultiClick) are triggered within one interaction. As a consequence a single-click interaction is detected after waiting some milliseconds (see setClickTicks()) without another click happening; Only if you have not attached any double-click event function the waiting time can be skipped.
Detecting a long 'down' not only works with the first but always as the last click.
The number of actual clicks can be retrieved from the library any time.
The function getPressedTicks() was removed. See example SimpleOneButton on how to get that time by using attachLongPressStart to save starting time.
The function attachPressStart() is removed as attachLongPressStart() does the same but also supports parameters.
One additional feature has been added not to call the event functions from the interrupt routine and detect the need for event functions to be called only when the tick() function is called from the main loop() method. This is because some boards and processors do not support timing or Serial functions (among others) from interrupt routines.
The function isIdle() was added to allow detect a current interaction.
The library now supports to detect multiple (>2) clicks in a row using attachMultiClick() .
- The internal _state is using enum instead of plain numbers to make the library more readable.
- functions that had been marked deprecated are now removed. (attachPress->attachLongPressXXX)
- added const to constant parameters to enable meaningful compiler warnings.
- added code for de-bouncing double clicks from pull 27.
- added isIdle() function to find out that the internal state is
init
.
-
Examples run on NodeMCU boards. (the library worked already).
-
The SimpleOneButton.ino example got some cleanup and definition to be used with ESP8266 boards as well.
-
The InterruptOneButton.ino example now is using attachInterrupt instead of UNO specific register modifications.
-
The SpecialInput.ino example was added to shpow how to use the OneButton algorythm and input pattern recognition with your own source of input.