Control Surface  1.2.0
MIDI Control Surface library for Arduino
AbsoluteRotaryEncoder.ino

AbsoluteRotaryEncoder

This example demonstrates the use of absolute MIDI CC rotary encoders that can be used for changing effect parameters, volumes, pan and balance controls, etc.

The absolute here means that the Arduino keeps track of the position of the encoder, and it sends this absolute position over MIDI.
Usually, encoders send relative messages ("5 ticks to the left", "1 tick to the right").

Similar to the CCAbsoluteEncoder, there's also PBAbsoluteEncoder that sends absolute MIDI Pitch Bend messages.

Boards:
AVR, AVR USB, Nano Every, Due, Nano 33, Teensy 3.x

Connections

Connect the common terminal of the encoder to ground. The built-in pullup resistors will be enabled.

Behavior

Mapping

Select the Arduino as a custom MIDI controller in your DAW, and map it like a normal CC controller (not a relative one).

Written by PieterP, 2019-12-18
https://github.com/tttapa/Control-Surface

#include <Encoder.h> // Include the Encoder library.
// This must be done before the Control Surface library.
#include <Control_Surface.h> // Include the Control Surface library
// Instantiate a MIDI over USB interface.
// Instantiate a CCAbsoluteEncoder object
{2, 3}, // pins
MIDI_CC::Pan, // MIDI address (CC number + optional channel)
1, // optional multiplier if the control isn't fast enough
};
// Similarly, for Pitch Bend
// PBAbsoluteEncoder enc = {
// {2, 3}, // pins
// CHANNEL_1, // MIDI channel
// 127, // large multiplier because Pitch Bend has high resolution
// };
void setup() {
Control_Surface.begin(); // Initialize Control Surface
}
void loop() {
Control_Surface.loop(); // Update the Control Surface
}
USBMIDI_Interface
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
Definition: USBMIDI_Interface.hpp:41
CCAbsoluteEncoder
A class of MIDIOutputElements that read the input of a quadrature (rotary) encoder and send out absol...
Definition: CCAbsoluteEncoder.hpp:21
MIDI_CC::Pan
constexpr uint8_t Pan
Definition: Control_Change.hpp:26
Control_Surface.h
The main header file that includes all Control-Surface header files.
Control_Surface_::loop
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Definition: Control_Surface_Class.cpp:68
Control_Surface
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
Definition: Control_Surface_Class.cpp:203
Control_Surface_::begin
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:25