50 lines
2.3 KiB
Markdown
50 lines
2.3 KiB
Markdown
ClickEncoder
|
|
=============
|
|
|
|
> Arduino library to handle rotary encoders **with** buttons as a user input device.
|
|
Arduino RotaryEncoder with Button Implementation.
|
|
|
|
|
|
- Timer-Based: Works on any IO-Pin.
|
|
- Supports rotary acceleration, so when the encoder is rotated faster, the encoders value will increment faster
|
|
- Button reports multiple states: `Clicked`, `DoubleClicked`, `Held` and `Released`
|
|
|
|
Encoder and button can be connected to any input pin, as this library requires it's timer interrupt service routine ClickEncoder:service() to be called every millisecond. The example uses [TimerOne] for that.
|
|
|
|
See the example application [ClickEncoderTest] for details,
|
|
or see it in action at my modified [reflow oven controller]
|
|
|
|
### Encoder
|
|
The library supports **acceleration**, so when the encoder is rotated faster, the encoders value will increment faster.
|
|
|
|
Acceleration can be enabled or disabled at runtine using `setAccelerationEnabled(bool)`.
|
|
|
|
For instance, it makes sense to disable acceleration when entering a configuration menu that will be navigated using the encoder.
|
|
|
|
**Please note** that the acceleration parameters have been tuned for **1ms timer** intervals, and need to be changed if you decide to call the service method in another interval. (You'd need to increase ENC_ACCEL_INC and ENC_ACCEL_INC).
|
|
|
|
Depending on the type of your encoder, you can define use the constructors parameter `stepsPerNotch` an set it to either `1`, `2` or `4` steps per notch, with `1` being the default.
|
|
|
|
If you have trouble with certain encoders, try
|
|
|
|
#define ENC_DECODER (1 << 2)
|
|
|
|
to use a table-based decoder, which can then be tuned using
|
|
|
|
#define ENC_HALFSTEP
|
|
|
|
The default is ENC_HALFSTEP 1.
|
|
|
|
### Button
|
|
The Button reports multiple states: `Clicked`, `DoubleClicked`, `Held` and `Released`. You can fine-tune the timings in the library's header file.
|
|
|
|
If your encoder does not have a button, and you need to save program memory, use `#define WITHOUT_BUTTON 1`
|
|
prior including `ClickEncoder.h`, and ignore the third parameter `BTN` of the constructor.
|
|
|
|
|
|
[TimerOne]:http://playground.arduino.cc/Code/Timer1
|
|
[Branch arduino]:https://github.com/0xPIT/encoder/tree/arduino
|
|
[ClickEncoderTest]:https://github.com/0xPIT/encoder/blob/arduino/examples/ClickEncoderTest/ClickEncoderTest.ino
|
|
[reflow oven controller]:https://github.com/0xPIT/reflowOvenController
|
|
|