Encoder
rotary encoders invoke events when rotated, pressed or released. KLST_PANDA features two encoders; one left (00
), one right(01
) ( see Technical Specifications ):
- ② :: rotary encoder ( push button, 24 pulses, no dents, 6mm D-shaft ) ( left
00
) - ⑦ :: rotary encoder ( push button, 24 pulses, no dents, 6mm D-shaft ) ( right
01
)
void encoder_event(Encoder* encoder, uint8_t event)
Encoder* encoder_create(uint8_t device_type);
void encoder_delete(Encoder* encoder);
void encoder_start(Encoder* encoder);
void encoder_stop(Encoder* encoder);
void encoder_register_listener(Encoder* encoder);
Encoder
uint8_t device_type
bool button_pressed
int32_t rotation
...
Example Encoder
/**
* this example demonstrates how to use encoders.
*/
#include "Arduino.h"
#include "System.h"
#include "Console.h"
#include "Encoder.h"
Encoder* encoder_LEFT;
Encoder* encoder_RIGHT;
void setup() {
system_init();
encoder_LEFT = encoder_create(ENCODER_LEFT);
encoder_RIGHT = encoder_create(ENCODER_RIGHT);
}
void loop() {}
void encoder_event(Encoder* encoder, uint8_t event) {
if (event == ENCODER_EVENT_ROTATION) {
console_println("ENCODER_EVENT_ROTATION(%i): %i ", encoder->device_type, encoder->rotation);
}
if (event == ENCODER_EVENT_BUTTON) {
if (encoder->button_pressed == ENCODER_PRESSED && encoder->device_type == ENCODER_LEFT) {
if (encoder_RIGHT->started) {
encoder_stop(encoder_RIGHT);
console_println("ENCODER_RIGHT stopped");
} else {
encoder_start(encoder_RIGHT);
console_println("ENCODER_RIGHT started");
}
}
console_println("ENCODER_EVENT_BUTTON (%i): %i ", encoder->device_type, encoder->button_pressed);
}
}