Hi, I'm in the process of building a controller for Arturia Synclavier V and I use banks to control the 12 partials which are on 12 MIDI channels.
I'm using the Control_Surface library and I know I can use 2 buttons and 12 LEDs by using IncrementDecrementSelectorLEDs to select the banks but I'd like to use 12 illuminated tactile buttons for each bank/MIDI channel.
I looked but I couldn't find a concise example, how can I do this? Here's my code:
#include <Control_Surface.h>
#include <AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.hpp>
using namespace ExtIO; // Bring the ExtIO pin functions into your sketch
USBMIDI_Interface usbmidi;
Bank<12> bank(1); // A bank with one channels, and 12 bank settings
//*** MUX 1 ***
//Instantiate 74HC4067 Digital multiplexer
CD74HC4067 mux1 ={4, {0,1,2,3} };
//*** MUTE ***
Bankable::CCButtonLatched<12> partiel[] {
{bank, mux1.pin(15), {30, CHANNEL_1}},
{bank, mux1.pin(14), {31, CHANNEL_1}},
{bank, mux1.pin(13), {32, CHANNEL_1}},
{bank, mux1.pin(12), {33, CHANNEL_1}},
{bank, mux1.pin(11), {34, CHANNEL_1}},
{bank, mux1.pin(10), {35, CHANNEL_1}},
{bank, mux1.pin(9), {36, CHANNEL_1}},
{bank, mux1.pin(8), {37, CHANNEL_1}},
{bank, mux1.pin(7), {38, CHANNEL_1}},
{bank, mux1.pin(6), {39, CHANNEL_1}},
{bank, mux1.pin(5), {40, CHANNEL_1}},
{bank, mux1.pin(4), {41, CHANNEL_1}},
{bank, mux1.pin(3), {42, CHANNEL_1}},
{bank, mux1.pin(2), {43, CHANNEL_1}},
{bank, mux1.pin(1), {44, CHANNEL_1}},
{bank, mux1.pin(0), {45, CHANNEL_1}},
};
//*** POTS ***
Bankable::CCPotentiometer pots [] {
{{bank, BankType::CHANGE_CHANNEL}, A2, {20, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A3, {21, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A4, {22, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A5, {23, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A6, {24, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A7, {25, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A8, {26, CHANNEL_1}},
{{bank, BankType::CHANGE_CHANNEL}, A9, {27, CHANNEL_1}},
};
IncrementDecrementSelector<12> selector {
bank, // Bank to manage
{6, 7}, // push button pins (increment, decrement)
Wrap::Wrap, // Wrap around
};
void setup() {
Control_Surface.begin();
}
void loop() {
// Refresh all inputs
Control_Surface.loop();
}