Control Surface  1.1.0
MIDI Control Surface library for Arduino
CCIncrementDecrementButtons.ino

CCIncrementDecrementButtons

This is an example that demonstrates the use of Increment and Decrement buttons that can be used for scrolling through a song list, tuning effects, etc.
You can compare it to a rotary encoder, but with two buttons instead of an encoder.

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

Connections

The internal pull-up resistors for the buttons will be enabled automatically.

Behavior

Map the Arduino as a Mackie Control Universal (MCU) or equivalent in your audio software.

Written by PieterP, 2019-01-26
https://github.com/tttapa/Control-Surface

/**
* This is an example that demonstrates the use of Increment and
* Decrement buttons that can be used for scrolling through a song
* list, tuning effects, etc.
* You can compare it to a rotary encoder, but with two buttons instead of an
* encoder.
*
* @boards AVR, AVR USB, Due, Nano 33, Teensy 3.x, ESP32
*
* Connections
* -----------
*
* - 5: momentary push button (to ground)
* - 6: momentary push button (to ground)
*
* The internal pull-up resistors for the buttons will be enabled automatically.
*
* Behavior
* --------
*
* - If the button on pin 5 is pressed, a MIDI CC increment message is sent.
* - If the button on pin 6 is pressed, a MIDI CC decrement message is sent.
* - The controller number `MCU::V_POT_1` will be used.
* - If either of the buttons is pressed down for a longer time, it will keep on
* sending increment/decrement messages quickly until you release it (like a
* key on a computer keyboard).
* This is to make it easier to scroll a large amount, for example.
* The timing can be changed by tweaking @ref AH::LONG_PRESS_DELAY and
* @ref AH::LONG_PRESS_REPEAT_DELAY in @ref AH/Settings/Settings.hpp.
* - If both buttons are pressed simultaneously, a MIDI Note On event is sent on
* note `MCU::V_POT_SELECT_1`.
* (This is optional, you can just leave out the final argument to the
* constructor, and it won't send anything when you press both buttons at
* once).
* - The multiplier can be used to increment multiple ticks per each time you
* press a button. This is useful if you have to press the button for a very
* long time to get a substantial change.
*
* Map the Arduino as a Mackie Control Universal (MCU) or equivalent in your
* audio software.
*
* Written by PieterP, 2019-01-26
* https://github.com/tttapa/Control-Surface
*/
#include <Control_Surface.h> // Include the Control Surface library
// Instantiate a MIDI over USB interface.
// Instantiate a CCIncrementDecrementButtons object
{5, 6}, // Button pins: 5 increments, 6 decrements
MCU::V_POT_1, // Increment/Decrement CC address
1, // Multiplier
MCU::V_POT_SELECT_1, // Reset note address
};
void setup() {
// Use the Mackie Control protocol for sending relative MIDI CC messages.
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:43
MACKIE_CONTROL_RELATIVE
Relative mode used by the Mackie Control Universal protocol.
Definition: RelativeCCSender.hpp:62
Control_Surface.h
The main header file that includes all Control-Surface header files.
RelativeCCSender::setMode
static void setMode(relativeCCmode mode)
Definition: RelativeCCSender.hpp:105
CCIncrementDecrementButtons
A class of MIDIOutputElements that read the input of two momentary push buttons to increment or decre...
Definition: CCIncrementDecrementButtons.hpp:19
Control_Surface
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
Definition: Control_Surface_Class.cpp:174
MCU::V_POT_SELECT_1
constexpr uint8_t V_POT_SELECT_1
Definition: MCU.hpp:54
Control_Surface_::begin
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:25
MCU::V_POT_1
constexpr uint8_t V_POT_1
Definition: MCU.hpp:152
Control_Surface_::loop
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Definition: Control_Surface_Class.cpp:48