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);
    }
}