Control Surface. CCRangeLeds or CCValueLED

Hi!

I am moving forward to finish and introduce my midi footswitch…

I want to assign one led to a CC value (a DAW pedal, and one physical button)…so when the pedal it´s on…the led will light on…and when we switch off and the pedal goes to off… the led will go off too.

Is this possible??
i am not able to follow NOTEvalueled or NOTErangeleds example and transport it to CC or understand docu yet.

#include <Control_Surface.h>  /*Program--include library-- then select "control surface" library..Vamos a programar el codigo con la librería Control Surface*/
USBMIDI_Interface usbmidi;    /*initializes device as usb_midi interface...see other examples like hardwareserial,hairles etc*/


Bank<4> bank(4);
Bank<4> bank2(4);

// Instantiate a multiplexer
CD74HC4067 mux = {
  12,            // input pin
  {8, 9, 10, 11}, // Address pins S0, S1, S2, S3
  // 7, // Optionally, specify the enable pin
};

CCButtonLatched bankbutt [] = {
  { mux.pin(0), { 90, CHANNEL_1 } },
  { mux.pin(1), { 94, CHANNEL_2 } },
  { mux.pin(2), { 98, CHANNEL_3 } },
  { mux.pin(3), { 102, CHANNEL_4 } },
  { mux.pin(4), { 106, CHANNEL_5 } },
  { mux.pin(5), { 110, CHANNEL_6 } },
  { mux.pin(6), { 114, CHANNEL_7 } },
  { mux.pin(7), { 118, CHANNEL_8 } },
 };

Bankable::CCPotentiometer pots[] = {    //los potenciometros conectados A0;A1 y A2 empiezan en 67,68 y 69 respectivamente de CC y cada vez que pulsemos el boton 8 incrementaran un valor de CC hasta 4 veces (el potenciometro con CC 67 llegara al  CC 71 y luego volvera a 67 en la siguiente pulsacion del boton 8)
  
  {bank, A0, 66},
  {bank, A1, 67},
  {bank, A2, 68},
  {bank, A3, 69},
  {bank, A12, 70},
  {bank, A13, 71},
  {bank, A14, 72},
  {bank, A15, 73},

 };

Bankable::CCPotentiometer pots2[] = {    //los potenciometros conectados A0;A1 y A2 empiezan en 67,68 y 69 respectivamente de CC y cada vez que pulsemos el boton 8 incrementaran un valor de CC hasta 4 veces (el potenciometro con CC 67 llegara al  CC 71 y luego volvera a 67 en la siguiente pulsacion del boton 8)
  
  {bank2, A5, 74},
  {bank2, A6, 75},
  {bank2, A7, 76},
  {bank2, A8, 77},
  {bank2, A9, 78},
  {bank2, A10, 79},
  {bank2, A11, 80},
  
  };


Bankable::CCButtonLatched<4>  bankbuttons [] = {
  { bank, 5, 90, },   //los botones de los pines 5 y 6 empiezan en 90 y 91 respectivamente de CC y cada vez que pulsemos el boton 8 incrementaran un valor de CC hasta 4 veces (el 90 llegara al 94 y luego volvera a 90 en la siguiente pulsacion del boton 8).el boton 7 es lo contrario del 8
  { bank, 6, 91, },
  
 };

 CCValueLED<8> bankbutt2  = {
   bank3,
   {30, 31, 32},
   {33, 34, 35},
  
 };

IncrementDecrementSelectorLEDs<4> bankSelector = {
  bank,
  {2, 3},         // button pins
  {26, 27, 28, 29}, // LED pins
};  //establecemos los pines 7 y 8 como los pines para crecer o decrecer el banco configurado (cuatro ajustes distintos para ese banco configurado)

IncrementDecrementSelectorLEDs<4> bankSelector2 = {
  bank2,
  {20, 21},         // button pins
  {22, 23, 24, 25}, // LED pins
};

void setup() {
   Control_Surface.begin();
    pinMode(ledPin, OUTPUT);
}
  // put your setup code here, to run once:

}

void loop() {

Control_Surface.loop();
  
  // put your main code here, to run repeatedly:

  /*lo siguiente es para los leds de los bancos*/
    // Function that checks if a given button is pressed
  auto checkButtonPressed = [](const Bankable::CCButtonLatched<4> &button) {
    return button.getButtonState() == Button::Pressed;
  };

  // If any of the push buttons is pressed
  bool pressed = std::any_of(std::begin(bankbuttons), std::end(bankbuttons),
                             checkButtonPressed);

                             
  // Turn on the LED
  digitalWrite(ledPin, pressed);


};

In this code theres two incremental decremental bank groups…8 pots on each group,when you change bank the led will indicate the bank
Thanks.

From the documentation of CCValueLED:

MIDI Input Element that listens for MIDI Control Change messages for the given controller, and displays its value by turning on/off an LED depending on whether the MIDI controller value is above or below a certain threshold.

Do you want to listen for incoming MIDI Control Change messages sent by your DAW? Or do you want the LEDs to be based on the state of the CCButtonLatched buttons you have in your code already?

If you want to do the latter, simply loop over all CCButtonLatched objects, call the getState() method and turn on/off the corresponding LED based on its return value.

Pieter

Pedals are assigned to CC…
Pedal number 1 its assgned to CC90
Pedal number 2 its on CC94…and so on…

I want 8 CCButtonLatched buttons with 8 leds.

For example…pedal 1…when pedal assigned to CC90 will be on…the led will be on too. and so on for 8 buttons and 8CC.

#include <Control_Surface.h>



USBMIDI_Interface usbmidi; 


Bank<4> bank(4);
Bank<4> bank2(4);

// Instantiate a multiplexer
CD74HC4067 mux = {
  12,            // input pin
  {8, 9, 10, 11}, // Address pins S0, S1, S2, S3
  // 7, // Optionally, specify the enable pin
};

CCButtonLatched futton [] = {
  { mux.pin(0), { 90, CHANNEL_1 } },
  { mux.pin(1), { 94, CHANNEL_2 } },
  { mux.pin(2), { 98, CHANNEL_3 } },
  { mux.pin(3), { 102, CHANNEL_4 } },
  { mux.pin(4), { 106, CHANNEL_5 } },
  { mux.pin(5), { 110, CHANNEL_6 } },
  { mux.pin(6), { 114, CHANNEL_7 } },
  { mux.pin(7), { 118, CHANNEL_8 } },
 };

Bankable::CCButtonLatched<4>  bankbuttons [] = {
  { bank, 5, 90, },  
  { bank, 6, 91, },
  };

Bankable::CCPotentiometer pots[] = {    
  
  {bank, A0, 66},
  {bank, A1, 67},
  {bank, A2, 68},
  {bank, A3, 69},
  {bank, A12, 70},
  {bank, A13, 71},
  {bank, A14, 72},
  {bank, A15, 73},
  };
 
Bankable::CCPotentiometer pots2[] = {    
  
  {bank2, A5, 74},
  {bank2, A6, 75},
  {bank2, A7, 76},
  {bank2, A8, 77},
  {bank2, A9, 78},
  {bank2, A10, 79},
  {bank2, A11, 80},
  };
IncrementDecrementSelectorLEDs<4> bankSelector = {
  bank,
  {2, 3},         // button pins
  {26, 27, 28, 29}, // LED pins
  }; 

IncrementDecrementSelectorLEDs<4> bankSelector2 = {
  bank2,
  {20, 21},         // button pins
  {22, 23, 24, 25}, // LED pins
  };


constexpr pin_t ledPin = 30;
constexpr pin_t ledPin2 = 31;
constexpr pin_t ledPin3 = 32;
constexpr pin_t ledPin4 = 33;
constexpr pin_t ledPin5 = 34;
constexpr pin_t ledPin6 = 35;
constexpr pin_t ledPin7 = 36;
constexpr pin_t ledPin8 = 37;



CCValueLED led = {
  ledPin,
  { 90, CHANNEL_1 },
};

CCValueLED led2 = {
  ledPin2,
  { 94, CHANNEL_2 },
};

void setup() {

    Control_Surface.begin();
    pinMode(ledPin, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    pinMode(ledPin4, OUTPUT);
    pinMode(ledPin5, OUTPUT);
    pinMode(ledPin6, OUTPUT);
    pinMode(ledPin7, OUTPUT);
    pinMode(ledPin8, OUTPUT);
 

}

void loop() {
  // put your main code here, to run repeatedly:
  Control_Surface.loop();
  // Function that checks if a given button is pressed
  auto checkButtonPressed = [](const CCButtonLatched &futton) {
    return futton.getButtonState() == Button::Pressed;
  };
  // If any of the push buttons is pressed
  bool pressed = std::any_of(std::begin(futton), std::end(futton),
                             checkButtonPressed);
  // Turn on the LED
  digitalWrite(ledPin, pressed);
  digitalWrite(ledPin2, pressed);
  digitalWrite(ledPin3, pressed);
  digitalWrite(ledPin4, pressed);
  digitalWrite(ledPin5, pressed);
  digitalWrite(ledPin6, pressed);
  digitalWrite(ledPin7, pressed);
  digitalWrite(ledPin8, pressed);
}

Ok…a friend of mine pointed me at the right direction

so i got this code running.a little step forward…but i have assumed i need to understand how things work

#include <Control_Surface.h>



USBMIDI_Interface usbmidi; 


Bank<4> bank(4);  /*El bank tiene 4 posiciones o 4 ajustes de banco posibles <4> y se llama bank y tiene un rango de cuatro (4) por lo 
                     tanto crecerá o decrecerá cuatro valores*/
Bank<4> bank2(4);  /*El bank tiene 4 posiciones o 4 ajustes de banco posibles <4> y se llama bank2 y tiene un rango de cuatro (4) por lo 
                     tanto crecerá o decrecerá (4) valores*/

// Instantiate a multiplexer
CD74HC4067 mux = {
  12,            // input pin
  {8, 9, 10, 11}, // Address pins S0, S1, S2, S3
  // 7, // Optionally, specify the enable pin
};

CCButtonLatched futton [] = {          /*declarar los pines del multiplexer CD74HC4067 del tipo CCbuttonlatched y con nombre futton*/
  { mux.pin(0), { 90, CHANNEL_1 } },    /* pin C0 del multiplexer en canal uno y con CC90*/
  { mux.pin(1), { 94, CHANNEL_2 } }, 
  { mux.pin(2), { 98, CHANNEL_3 } },     /*todos los botones del multiplexer encienden o apagan cada uno de los 8 pedales que configuremos en nuestro DAW (cubase,amplitube,etc)*/                                               
  { mux.pin(3), { 102, CHANNEL_4 } },
  { mux.pin(4), { 106, CHANNEL_5 } },
  { mux.pin(5), { 110, CHANNEL_6 } },
  { mux.pin(6), { 114, CHANNEL_7 } },
  { mux.pin(7), { 118, CHANNEL_8 } },
 }; 

Bankable::CCButtonLatched<4>  bankbuttons [] = {  /*declarar los botones que creceran o decreceran (4) valores dentro de cada cambio de banco.Serán del tipo ccbuttonlatched,se llamarán bankbuttons y los declaramos como bankables en los pines de salida 5 y 6 de arduino con los CC90 Y CC91 */
  { bank, 5, 90, },  
  { bank, 6, 91, },
  };

Bankable::CCPotentiometer pots[] = {    /*declarar los potenciometros que creceran o decreceran (4) valores dentro de cada cambio de banco.Serán del tipo ccpotentiometer,se llamarán pots y los declaramos como bankables en los pines analogicos de salida A0,A1..ETC..de arduino con los CC66,CC67..ETC*/
  
  {bank, A0, 66},
  {bank, A1, 67},
  {bank, A2, 68},
  {bank, A3, 69},
  {bank, A12, 70},
  {bank, A13, 71},
  {bank, A14, 72},
  {bank, A15, 73},
  };
 
Bankable::CCPotentiometer pots2[] = {    /*declarar los potenciometros que creceran o decreceran (4) valores dentro de cada cambio de banco.Serán del tipo ccpotentiometer,se llamarán pots y los declaramos como bankables en los pines analogicos de salida A0,A1..ETC..de arduino con los CC66,CC67..ETC*/
  
  {bank2, A5, 74},
  {bank2, A6, 75},
  {bank2, A7, 76},
  {bank2, A8, 77},
  {bank2, A9, 78},
  {bank2, A10, 79},
  {bank2, A11, 80},
  };
IncrementDecrementSelectorLEDs<4> bankSelector = {   /*declarar lo botones que van a incrementar o decrecer la posicion del cambio de banco dentro del banco llamado bank..como tiene cuatro bancos posibles..declaramos cuatro led pins para saber la posición del banco en el que estamos. Los botones  que nos permitiran cambiar el banco serán los pines 2 y 3 en arduino*/
  bank,
  {2, 3},         // button pins
  {26, 27, 28, 29}, // LED pins
  }; 

IncrementDecrementSelectorLEDs<4> bankSelector2 = {   /*declarar lo botones que van a incrementar o decrecer la posicion del cambio de banco dentro del banco llamado bank2..como tiene cuatro bancos  posibles..declaramos cuatro led pins para saber la posición del banco en el que  estamos. Los botones que nos permitiran cambiar el banco serán los pines 2 y 3 en  arduino*/
  bank2,
  {20, 21},         // button pins
  {22, 23, 24, 25}, // LED pins
  };



const pin_t ledPins[] = { 30, 31, 32, 33, 34, 35, 36, 37 };

template <class T, size_t N> constexpr size_t length(T (&)[N]) { return N; }

static_assert(length(futton) == length(ledPins),
              "Error: requires same number of buttons as LEDs");


void setup() {

    Control_Surface.begin();
 for (auto pin : ledPins)  // Set the pinMode to output for all LEDs
      pinMode(pin, OUTPUT);
 

}

void loop() {
  // put your main code here, to run repeatedly:
  Control_Surface.loop();
 for (size_t i = 0; i < length(futton); ++i)
      // Update the LED states to reflect the toggled switch states
      digitalWrite(ledPins[i], futton[i].getState() ? HIGH : LOW);
}

Pedals.leds,banks…
its amazing thanks!!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.