Could I streamline this code for LED control on Midi controller

Iain

Member
Hi Guys

I have been working on a custom midi controller using the notes and volts code as a base. This works perfectly . The bit I feel is a little clunky although working great is the section for LED control. I have 13 LEDs assigned to some buttons. I used multiple if statements to assign the button numbers to the led array but feel there must be amore elegant method and would love to learn. havent posted the controller h section but that is where the bToggle function is stored and the button variables.

Thanks in advance for any help in streamlining this
Iain

Code:
#include "Controller.h"

/*************************************************************
  TAL UNO LX Controller WITH CYCLING 3/4/5/ WAY BUTTONS

  Iain Dunn 2021 version 1.0 (based on notes and Volts and Massijam code for Teensy)

  www.notesandvolts.com
  https://github.com/maasijam/model_d_controller


  For Teensy LC
 *************************************************************/


//************************************************************
//***SET THE NUMBER OF CONTROLS USED**************************
//************************************************************


//---How many push buttons are connected to a multiplexer?---------
byte NUMBER_MUX_BUTTONS = 23;

//---How many potentiometers are connected to a multiplexer?--
byte NUMBER_MUX_POTS = 32;



//***ANY MULTIPLEXERS? (74HC4067)************************************
//MUX address pins must be connected to Teensy pins 2,3,4,5
//Mux NAME (OUTPUT PIN, , How Many Mux Pins?(8 or 16) , Is It Analog?);
//*******************************************************************

Mux M1(0, 16, false); //Digital multiplexer on Teensy pin 0
Mux M2(1, 16 , false); //Digital multiplexer on Teensy pin 1
Mux M3(A0, 16, true); //Analog multiplexer on Arduino analog pin A0
Mux M4(A1, 16, true); //Analog multiplexer on Arduino analog pin A1



//***DEFINE BUTTONS CONNECTED TO MULTIPLEXER*************************
//Button::Button(Mux mux, byte muxpin, byte command, byte value, byte channel, byte debounce)
//** Command parameter 0=NOTE  1=CC  2=Toggle CC  3= 3way 4= 4way 5 = 5way switch 6 LED Toggle

Button MBU1 (M1, 0, 3, 3, 1, 10);
Button MBU2 (M1, 1, 2, 9, 1, 10);
Button MBU3 (M1, 2, 2, 14, 1, 10);
Button MBU4 (M1, 3, 2, 15, 1, 10);
Button MBU5 (M1, 4, 2, 16, 1, 10);
Button MBU6 (M1, 5, 2, 17, 1, 10);
Button MBU7 (M1, 6, 2, 18, 1, 10);
Button MBU8 (M1, 7, 2, 19, 1, 10);
Button MBU9 (M1, 8, 3, 20, 1, 10);
Button MBU10(M1, 9, 3, 21, 1, 10);
Button MBU11(M1, 10, 5, 22, 1, 10);
Button MBU12(M1, 11, 2, 23, 1, 10);
Button MBU13(M1, 12, 2, 102, 1, 10);
Button MBU14(M1, 13, 2, 103, 1, 10);
Button MBU15(M1, 14, 2, 104, 1, 10);
Button MBU16(M1, 15, 2, 105, 1, 10);
Button MBU17(M2, 0, 2, 106, 1, 10);
Button MBU18(M2, 1, 2, 107, 1, 10);
Button MBU19(M2, 2, 2, 108, 1, 10);
Button MBU20(M2, 3, 4, 109, 1, 10);
Button MBU21(M2, 4, 3, 110, 1, 10);
Button MBU22(M2, 5, 3, 111, 1, 10);
Button MBU23(M2, 6, 2, 112, 1, 10);


//*******************************************************************
//Add multiplexed buttons used to array below like this->  Button *MUXBUTTONS[] {&MBU1, &MBU2, &MBU3, &MBU4, &MBU5, &MBU6.....};
Button *MUXBUTTONS[] {&MBU1, &MBU2, &MBU3, &MBU4, &MBU5, &MBU6, &MBU7, &MBU8, &MBU9, &MBU10, &MBU11, &MBU12, &MBU13, &MBU14, &MBU15, &MBU16,
         &MBU17, &MBU18, &MBU19, &MBU20, &MBU21, &MBU22, &MBU23
};






//***DEFINE POTENTIOMETERS CONNECTED TO MULTIPLEXER*******************
//Pot::Pot(Mux mux, byte muxpin, byte command, byte control, byte channel)
//**Command parameter is for future use**

Pot MPO1 (M3, 0, 0, 24, 1);
Pot MPO2 (M3, 1, 0, 25, 1);
Pot MPO3 (M3, 2, 0, 26, 1);
Pot MPO4 (M3, 3, 0, 27, 1);
Pot MPO5 (M3, 4, 0, 28, 1);
Pot MPO6 (M3, 5, 0, 29, 1);
Pot MPO7 (M3, 6, 0, 30, 1);
Pot MPO8 (M3, 7, 0, 31, 1);
Pot MPO9 (M3, 8, 0, 33, 1);
Pot MPO10(M3, 9, 0, 34, 1);
Pot MPO11(M3, 10, 0, 35, 1);
Pot MPO12(M3, 11, 0, 36, 1);
Pot MPO13(M3, 12, 0, 37, 1);
Pot MPO14(M3, 13, 0, 38, 1);
Pot MPO15(M3, 14, 0, 39, 1);
Pot MPO16(M3, 15, 0, 40, 1);
Pot MPO17(M4, 0, 0, 41, 1);
Pot MPO18(M4, 1, 0, 42, 1);
Pot MPO19(M4, 2, 0, 43, 1);
Pot MPO20(M4, 3, 0, 44 , 1);
Pot MPO21(M4, 4, 0, 45 , 1);
Pot MPO22(M4, 5, 0, 46 , 1);
Pot MPO23(M4, 6, 0, 47 , 1);
Pot MPO24(M4, 7, 0, 48, 1);
Pot MPO25(M4, 8, 0, 49, 1);
Pot MPO26(M4, 9, 0, 50, 1);
Pot MPO27(M4, 10, 0, 51 , 1);
Pot MPO28(M4, 11, 0, 52, 1);
Pot MPO29(M4, 12, 0, 53 , 1);
Pot MPO30(M4, 13, 0, 54 , 1);
Pot MPO31(M4, 14, 0, 55 , 1);
Pot MPO32(M4, 15, 0, 56 , 1);




//Add multiplexed pots used to array below like this->  Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6.....};
Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6, &MPO7, &MPO8, &MPO9, &MPO10, &MPO11, &MPO12, &MPO13, &MPO14, &MPO15, &MPO16, &MPO17, &MPO18, &MPO19, &MPO20, &MPO21, &MPO22, &MPO23, &MPO24
  , &MPO25, &MPO26, &MPO27, &MPO28, &MPO29, &MPO30, &MPO31, &MPO32
};
//*******************************************************************

//***DEFINE POTENTIOMETERS CONNECTED DIRECTLY TO PINS*******************
//Pot::Pot(byte pin, byte command, byte control, byte channel)
//**Command parameter is for future use**


//*******************************************************************
//Add direct pots used to array below like this->  Pot *DIRECTPOTS[] {&DPO1, &DPO2, &DPO3, &DPO4 ...};

//*******************************************************************

const int channel = 1; // MIDI channel

const int ledPin[] = {6, 7, 8, 9, 10, 11, 12, 18, 19, 20, 21, 22, 23};

void setup() {

  pinMode(ledPin[0], OUTPUT);
  pinMode(ledPin[1], OUTPUT);
  pinMode(ledPin[2], OUTPUT);
  pinMode(ledPin[3], OUTPUT);
  pinMode(ledPin[4], OUTPUT);
  pinMode(ledPin[5], OUTPUT);
  pinMode(ledPin[6], OUTPUT);
  pinMode(ledPin[7], OUTPUT);
  pinMode(ledPin[8], OUTPUT);
  pinMode(ledPin[9], OUTPUT);
  pinMode(ledPin[10], OUTPUT);
  pinMode(ledPin[11], OUTPUT);
  pinMode(ledPin[12], OUTPUT);


  digitalWrite(ledPin[0], LOW);
  digitalWrite(ledPin[1], LOW);
  digitalWrite(ledPin[2], LOW);
  digitalWrite(ledPin[3], LOW);
  digitalWrite(ledPin[4], LOW);
  digitalWrite(ledPin[5], LOW);
  digitalWrite(ledPin[6], LOW);
  digitalWrite(ledPin[7], LOW);
  digitalWrite(ledPin[8], LOW);
  digitalWrite(ledPin[9], LOW);
  digitalWrite(ledPin[10], LOW);
  digitalWrite(ledPin[11], LOW);
  digitalWrite(ledPin[12], LOW);

}

void loop() {
  if (NUMBER_MUX_POTS != 0) updateMuxPots();

  if (NUMBER_MUX_BUTTONS != 0) updateMuxButtons();

  while (usbMIDI.read()) {
    // controllers must call .read() to keep the queue clear even if they are not responding to MIDI
  }
}


//***********************************************************************
void updateMuxPots() {
  for (int i = 0; i < NUMBER_MUX_POTS; i = i + 1) {
    MUXPOTS[i]->muxUpdate();
    byte potmessage = MUXPOTS[i]->getValue();
    if (potmessage != 255) {
      usbMIDI.sendControlChange(MUXPOTS[i]->Pcontrol, potmessage, channel);
    }
  }
}


//*******************************************************************
void updateMuxButtons() {

  // Cycle through Mux Button array
  for (int i = 0; i < NUMBER_MUX_BUTTONS; i = i + 1) {

    MUXBUTTONS[i]->muxUpdate();
    byte message = MUXBUTTONS[i]->getValue();

    //  Button is pressed
    if (message == 0) {

      switch (MUXBUTTONS[i]->Bcommand) {
        case 2: //Toggle
          if (MUXBUTTONS[i]->Btoggle == 0) {
            MUXBUTTONS[i]->Btoggle = 1;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127, channel);
          }
          else if (MUXBUTTONS[i]->Btoggle == 1) {
            MUXBUTTONS[i]->Btoggle = 0;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);
          }

//*******************Toggle button LED Updates *******************************
          if  (MUXBUTTONS[1]->Btoggle == 1) {
            digitalWrite(ledPin[0], HIGH);
          }
          if (MUXBUTTONS[1]->Btoggle == 0) {
            digitalWrite(ledPin[0], LOW);
          }
//********************************************************
          if  (MUXBUTTONS[2]->Btoggle == 1) {
            digitalWrite(ledPin[1], HIGH);
          }
          if  (MUXBUTTONS[2]->Btoggle == 0) {
            digitalWrite(ledPin[1], LOW);
          }
//**********************************************************
          if  (MUXBUTTONS[3]->Btoggle == 1) {
            digitalWrite(ledPin[2], HIGH);
          }
          if  (MUXBUTTONS[3]->Btoggle == 0) {
            digitalWrite(ledPin[2], LOW);
          }
//********************Chorus LEDS**************************
          if  (MUXBUTTONS[5]->Btoggle == 1) {
            digitalWrite(ledPin[3], HIGH);
          }
          if  (MUXBUTTONS[5]->Btoggle == 0) {
            digitalWrite(ledPin[3], LOW);
          }

          if  (MUXBUTTONS[6]->Btoggle == 1) {
            digitalWrite(ledPin[4], HIGH);
          }
          if  (MUXBUTTONS[6]->Btoggle == 0) {
            digitalWrite(ledPin[4], LOW);
          }

//********************************************************
          if  (MUXBUTTONS[11]->Btoggle == 1) {
            digitalWrite(ledPin[5], HIGH);
          }
          if  (MUXBUTTONS[11]->Btoggle == 0) {
            digitalWrite(ledPin[5], LOW);
          }
          if  (MUXBUTTONS[12]->Btoggle == 1) {
            digitalWrite(ledPin[6], HIGH);
          }
          if  (MUXBUTTONS[12]->Btoggle == 0) {
            digitalWrite(ledPin[6], LOW);
          }
//********************************************************

          if  (MUXBUTTONS[14]->Btoggle == 1) {
            digitalWrite(ledPin[7], HIGH);
          }
          if  (MUXBUTTONS[14]->Btoggle == 0) {
            digitalWrite(ledPin[7], LOW);
          }
          if  (MUXBUTTONS[15]->Btoggle == 1) {
            digitalWrite(ledPin[12], HIGH);
          }
          if  (MUXBUTTONS[15]->Btoggle == 0) {
            digitalWrite(ledPin[12], LOW);
          }
//*******************************************************


          if  (MUXBUTTONS[16]->Btoggle == 1) {
            digitalWrite(ledPin[11], HIGH);
          }
          if  (MUXBUTTONS[16]->Btoggle == 0) {
            digitalWrite(ledPin[11], LOW);
          }
          if  (MUXBUTTONS[17]->Btoggle == 1) {
            digitalWrite(ledPin[10], HIGH);
          }
          if  (MUXBUTTONS[17]->Btoggle == 0) {
            digitalWrite(ledPin[10], LOW);
          }

          if  (MUXBUTTONS[18]->Btoggle == 1) {
            digitalWrite(ledPin[9], HIGH);
          }
          if  (MUXBUTTONS[18]->Btoggle == 0) {
            digitalWrite(ledPin[9], LOW);
          }
//************************************************************************
          if  (MUXBUTTONS[22]->Btoggle == 1) {
            digitalWrite(ledPin[8], HIGH);
          }
          if  (MUXBUTTONS[22]->Btoggle == 0) {
            digitalWrite(ledPin[8], LOW);
          }


//************************Multifunction button updates********************************

          break;
        // 3 way button cycle
        case 3:
          if ((MUXBUTTONS[i]->B3way == 0) && (MUXBUTTONS[i]-> button_press == 0 )) {
            MUXBUTTONS[i]->B3way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 1) && (MUXBUTTONS[i]-> button_press == 1 )) {
            MUXBUTTONS[i]->B3way = 2;
            MUXBUTTONS[i]->button_press = 2;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 55, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 2) && (MUXBUTTONS[i]-> button_press == 2 )) {
            MUXBUTTONS[i]->B3way = 3;
            MUXBUTTONS[i]->button_press = 3;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 3) && (MUXBUTTONS[i]-> button_press == 3 )) {
            MUXBUTTONS[i]->B3way = 0;
            MUXBUTTONS[i]->button_press = 0;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 55, channel);

          }

          break;

        // 4 way button cycle
        case 4:
          if ((MUXBUTTONS[i]->B4way == 0) && (MUXBUTTONS[i]-> button_press == 0)) {
            MUXBUTTONS[i]->B4way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);


          }

          else  if ((MUXBUTTONS[i]->B4way == 1 ) && (MUXBUTTONS[i]-> button_press == 1)) {
            MUXBUTTONS[i]->B4way = 2;
            MUXBUTTONS[i]->button_press = 2;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 40, channel);


          }

          else if  ((MUXBUTTONS[i]->B4way == 2 ) && (MUXBUTTONS[i]-> button_press == 2)) {
            MUXBUTTONS[i]->B4way = 3;
            MUXBUTTONS[i]->button_press = 3;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 80, channel);


          }

          else  if  ((MUXBUTTONS[i]->B4way == 3 ) && (MUXBUTTONS[i]-> button_press == 3)) {
            MUXBUTTONS[i]->B4way = 4;
            MUXBUTTONS[i]->button_press = 4;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 120, channel);


          }




          else if ((MUXBUTTONS[i]->B4way == 4 ) && (MUXBUTTONS[i]-> button_press == 4)) {
            MUXBUTTONS[i]->B4way = 3;
            MUXBUTTONS[i]->button_press = 5;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 80, channel);


          }

          else if ((MUXBUTTONS[i]->B4way == 3 ) && (MUXBUTTONS[i]-> button_press == 5)) {
            MUXBUTTONS[i]->B4way = 0;
            MUXBUTTONS[i]->button_press = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 40, channel);

          }


          //5 way button cycle
          break;

        case 5:
          if ((MUXBUTTONS[i]->B5way == 0) && (MUXBUTTONS[i]-> button_press == 0)) {
            MUXBUTTONS[i]->B5way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);

          }

          else  if ((MUXBUTTONS[i]->B5way == 1 ) && (MUXBUTTONS[i]-> button_press == 1)) {
            MUXBUTTONS[i]->B5way = 2;
            MUXBUTTONS[i]->button_press = 2;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 30, channel);

          }

          else if  ((MUXBUTTONS[i]->B5way == 2 ) && (MUXBUTTONS[i]-> button_press == 2)) {
            MUXBUTTONS[i]->B5way = 3;
            MUXBUTTONS[i]->button_press = 3;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 60, channel);

          }

          else  if  ((MUXBUTTONS[i]->B5way == 3 ) && (MUXBUTTONS[i]-> button_press == 3)) {
            MUXBUTTONS[i]->B5way = 4;
            MUXBUTTONS[i]->button_press = 4;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 90, channel);

          }

          else if ((MUXBUTTONS[i]->B5way == 4 ) && (MUXBUTTONS[i]-> button_press == 4)) {
            MUXBUTTONS[i]->B5way = 5;
            MUXBUTTONS[i]->button_press = 5;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 120, channel);


          }

          else if ((MUXBUTTONS[i]->B5way == 5 ) && (MUXBUTTONS[i]-> button_press == 5)) {
            MUXBUTTONS[i]->B5way = 4;
            MUXBUTTONS[i]->button_press = 6;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 90, channel);


          }

          else if ((MUXBUTTONS[i]->B5way == 4 ) && (MUXBUTTONS[i]-> button_press == 6)) {
            MUXBUTTONS[i]->B5way = 3;
            MUXBUTTONS[i]->button_press = 7;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 60, channel);


          }

          else if ((MUXBUTTONS[i]->B5way == 3 ) && (MUXBUTTONS[i]-> button_press == 7)) {
            MUXBUTTONS[i]->B5way = 0;
            MUXBUTTONS[i]->button_press = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 30, channel);

        }
      }
    }
  }
}
//**************************** End Code *****************************************
 
Thanks Pieter. I would have to find a way of doing the 3,4,and 5 way touch switches using your library and thought this one was easier to hack.
I was also thinking of for loops etc but the switches are non
consecutive in hardware and share the same mux as non led switches hence the ugly code and my lack of experience as it was the only way I could think of doing it.
Not sure if a struct type array might work?
 
I have managed to simplify some of the code with for loops but if i try multiple for loops for the different button sets it doesn't work but does work with the initial loop on the first three buttons. Is there a way to skip i++ iterations within 1 big loop?
Any help greatly appreciated
Iain

attached is modified code:
Code:
#include "Controller.h"

/*************************************************************
  TAL UNO LX Controller WITH CYCLING 3/4/5/ WAY BUTTONS & LED Toggles

  Iain Dunn 2021 version 1.0 (based on notes and Volts and Massijam code for Teensy)

  www.notesandvolts.com
  https://github.com/maasijam/model_d_controller


  For Teensy LC
 *************************************************************/


//************************************************************
//***SET THE NUMBER OF CONTROLS USED**************************
//************************************************************


//---How many push buttons are connected to a multiplexer?---------
byte NUMBER_MUX_BUTTONS = 23;

//---How many potentiometers are connected to a multiplexer?--
byte NUMBER_MUX_POTS = 32;



//***ANY MULTIPLEXERS? (74HC4067)************************************
//MUX address pins must be connected to Teensy pins 2,3,4,5
//Mux NAME (OUTPUT PIN, , How Many Mux Pins?(8 or 16) , Is It Analog?);
//*******************************************************************

Mux M1(0, 16, false); //Digital multiplexer on Teensy pin 0
Mux M2(1, 16 , false); //Digital multiplexer on Teensy pin 1
Mux M3(A0, 16, true); //Analog multiplexer on Arduino analog pin A0
Mux M4(A1, 16, true); //Analog multiplexer on Arduino analog pin A1



//***DEFINE BUTTONS CONNECTED TO MULTIPLEXER*************************
//Button::Button(Mux mux, byte muxpin, byte command, byte value, byte channel, byte debounce)
//** Command parameter 0=NOTE  1=CC  2=Toggle CC  3= 3way 4= 4way 5 = 5way switch 6 LED Toggle

Button MBU1 (M1, 0, 3, 3, 1, 10);
Button MBU2 (M1, 1, 2, 9, 1, 10);
Button MBU3 (M1, 2, 2, 14, 1, 10);
Button MBU4 (M1, 3, 2, 15, 1, 10);
Button MBU5 (M1, 4, 2, 16, 1, 10);
Button MBU6 (M1, 5, 2, 17, 1, 10);
Button MBU7 (M1, 6, 2, 18, 1, 10);
Button MBU8 (M1, 7, 2, 19, 1, 10);
Button MBU9 (M1, 8, 3, 20, 1, 10);
Button MBU10(M1, 9, 3, 21, 1, 10);
Button MBU11(M1, 10, 5, 22, 1, 10);
Button MBU12(M1, 11, 2, 23, 1, 10);
Button MBU13(M1, 12, 2, 102, 1, 10);
Button MBU14(M1, 13, 2, 103, 1, 10);
Button MBU15(M1, 14, 2, 104, 1, 10);
Button MBU16(M1, 15, 2, 105, 1, 10);
Button MBU17(M2, 0, 2, 106, 1, 10);
Button MBU18(M2, 1, 2, 107, 1, 10);
Button MBU19(M2, 2, 2, 108, 1, 10);
Button MBU20(M2, 3, 4, 109, 1, 10);
Button MBU21(M2, 4, 3, 110, 1, 10);
Button MBU22(M2, 5, 3, 111, 1, 10);
Button MBU23(M2, 6, 2, 112, 1, 10);


//*******************************************************************
//Add multiplexed buttons used to array below like this->  Button *MUXBUTTONS[] {&MBU1, &MBU2, &MBU3, &MBU4, &MBU5, &MBU6.....};
Button *MUXBUTTONS[] {&MBU1, &MBU2, &MBU3, &MBU4, &MBU5, &MBU6, &MBU7, &MBU8, &MBU9, &MBU10, &MBU11, &MBU12, &MBU13, &MBU14, &MBU15, &MBU16,
         &MBU17, &MBU18, &MBU19, &MBU20, &MBU21, &MBU22, &MBU23
};

//***DEFINE POTENTIOMETERS CONNECTED TO MULTIPLEXER*******************
//Pot::Pot(Mux mux, byte muxpin, byte command, byte control, byte channel)
//**Command parameter is for future use**

Pot MPO1 (M3, 0, 0, 24, 1);
Pot MPO2 (M3, 1, 0, 25, 1);
Pot MPO3 (M3, 2, 0, 26, 1);
Pot MPO4 (M3, 3, 0, 27, 1);
Pot MPO5 (M3, 4, 0, 28, 1);
Pot MPO6 (M3, 5, 0, 29, 1);
Pot MPO7 (M3, 6, 0, 30, 1);
Pot MPO8 (M3, 7, 0, 31, 1);
Pot MPO9 (M3, 8, 0, 33, 1);
Pot MPO10(M3, 9, 0, 34, 1);
Pot MPO11(M3, 10, 0, 35, 1);
Pot MPO12(M3, 11, 0, 36, 1);
Pot MPO13(M3, 12, 0, 37, 1);
Pot MPO14(M3, 13, 0, 38, 1);
Pot MPO15(M3, 14, 0, 39, 1);
Pot MPO16(M3, 15, 0, 40, 1);
Pot MPO17(M4, 0, 0, 41, 1);
Pot MPO18(M4, 1, 0, 42, 1);
Pot MPO19(M4, 2, 0, 43, 1);
Pot MPO20(M4, 3, 0, 44 , 1);
Pot MPO21(M4, 4, 0, 45 , 1);
Pot MPO22(M4, 5, 0, 46 , 1);
Pot MPO23(M4, 6, 0, 47 , 1);
Pot MPO24(M4, 7, 0, 48, 1);
Pot MPO25(M4, 8, 0, 49, 1);
Pot MPO26(M4, 9, 0, 50, 1);
Pot MPO27(M4, 10, 0, 51 , 1);
Pot MPO28(M4, 11, 0, 52, 1);
Pot MPO29(M4, 12, 0, 53 , 1);
Pot MPO30(M4, 13, 0, 54 , 1);
Pot MPO31(M4, 14, 0, 55 , 1);
Pot MPO32(M4, 15, 0, 56 , 1);




//Add multiplexed pots used to array below like this->  Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6.....};
Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6, &MPO7, &MPO8, &MPO9, &MPO10, &MPO11, &MPO12, &MPO13, &MPO14, &MPO15, &MPO16, &MPO17, &MPO18, &MPO19, &MPO20, &MPO21, &MPO22, &MPO23, &MPO24
  , &MPO25, &MPO26, &MPO27, &MPO28, &MPO29, &MPO30, &MPO31, &MPO32
};

//*******************************************************************

const int channel = 1; // MIDI channel

const int ledPin[] = {6, 7, 8, 9, 10, 11, 12, 18, 19, 20, 21, 22, 23};
const int LEDcount =13;

void setup() {

for (int i = 0 ;i < LEDcount ;i++){
  pinMode (ledPin[i],OUTPUT);
  digitalWrite(ledPin[i], LOW);

}
  

 

}

void loop() {
  if (NUMBER_MUX_POTS != 0) updateMuxPots();

  if (NUMBER_MUX_BUTTONS != 0) updateMuxButtons();

  while (usbMIDI.read()) {
    // controllers must call .read() to keep the queue clear even if they are not responding to MIDI
  }
}


//***********************************************************************
void updateMuxPots() {
  for (int i = 0; i < NUMBER_MUX_POTS; i = i + 1) {
    MUXPOTS[i]->muxUpdate();
    byte potmessage = MUXPOTS[i]->getValue();
    if (potmessage != 255) {
      usbMIDI.sendControlChange(MUXPOTS[i]->Pcontrol, potmessage, channel);
    }
  }
}


//*******************************************************************
void updateMuxButtons() {

  // Cycle through Mux Button array
  for (int i = 0; i < NUMBER_MUX_BUTTONS; i = i + 1) {

    MUXBUTTONS[i]->muxUpdate();
    byte message = MUXBUTTONS[i]->getValue();

    //  Button is pressed
    if (message == 0) {

      switch (MUXBUTTONS[i]->Bcommand) {
        case 2: //Toggle
          if (MUXBUTTONS[i]->Btoggle == 0) {
            MUXBUTTONS[i]->Btoggle = 1;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127, channel);
          }
          else if (MUXBUTTONS[i]->Btoggle == 1) {
            MUXBUTTONS[i]->Btoggle = 0;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);
          }

//*******************Toggle button LED Updates *******************************
       
          for (int i=0; i<3; i++){
          if  (MUXBUTTONS[i+1]->Btoggle == 1) {
            digitalWrite(ledPin[i], HIGH);
          }
          
           else digitalWrite(ledPin[i], LOW);
          }
          

//********************Chorus LEDS**************************
     
          if  (MUXBUTTONS[5]->Btoggle == 1) {
            digitalWrite(ledPin[3], HIGH);
          }
           else digitalWrite(ledPin[3], LOW);
          

          if  (MUXBUTTONS[6]->Btoggle == 1) {
            digitalWrite(ledPin[4], HIGH);
          }
           else digitalWrite(ledPin[4], LOW);
           
//*************************LFO Mode************************

          if  (MUXBUTTONS[11]->Btoggle == 1) {
            digitalWrite(ledPin[5], HIGH);
          }
          else digitalWrite(ledPin[5], LOW);
          if  (MUXBUTTONS[12]->Btoggle == 1) {
            digitalWrite(ledPin[6], HIGH);
          }
           else digitalWrite(ledPin[6], LOW);
           
//********************************************************

          if  (MUXBUTTONS[14]->Btoggle == 1) {
            digitalWrite(ledPin[7], HIGH);
          }
           else digitalWrite(ledPin[7], LOW);
           
          if  (MUXBUTTONS[15]->Btoggle == 1) {
            digitalWrite(ledPin[12], HIGH);
          }
           else digitalWrite(ledPin[12], LOW);
//*******************************************************

          if  (MUXBUTTONS[16]->Btoggle == 1) {
            digitalWrite(ledPin[11], HIGH);
          }
           else digitalWrite(ledPin[11], LOW);
           
          if  (MUXBUTTONS[17]->Btoggle == 1) {
            digitalWrite(ledPin[10], HIGH);
          }
           else digitalWrite(ledPin[10], LOW);

          if  (MUXBUTTONS[18]->Btoggle == 1) {
            digitalWrite(ledPin[9], HIGH);
          }
           else digitalWrite(ledPin[9], LOW);
//********************************************************
          if  (MUXBUTTONS[22]->Btoggle == 1) {
            digitalWrite(ledPin[8], HIGH);
          }
          else digitalWrite(ledPin[8], LOW);
          
          
           


//****************Multifunction button updates*****

          break;
// 3 way button cycle
        case 3:
          if ((MUXBUTTONS[i]->B3way == 0) && (MUXBUTTONS[i]-> button_press == 0 )) {
            MUXBUTTONS[i]->B3way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 1) && (MUXBUTTONS[i]-> button_press == 1 )) {
            MUXBUTTONS[i]->B3way = 2;
            MUXBUTTONS[i]->button_press = 2;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 55, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 2) && (MUXBUTTONS[i]-> button_press == 2 )) {
            MUXBUTTONS[i]->B3way = 3;
            MUXBUTTONS[i]->button_press = 3;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 3) && (MUXBUTTONS[i]-> button_press == 3 )) {
            MUXBUTTONS[i]->B3way = 0;
            MUXBUTTONS[i]->button_press = 0;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 55, channel);

          }

          break;

        // 4 way button cycle
        case 4:
          if ((MUXBUTTONS[i]->B4way == 0) && (MUXBUTTONS[i]-> button_press == 0)) {
            MUXBUTTONS[i]->B4way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);


          }

          else  if ((MUXBUTTONS[i]->B4way == 1 ) && (MUXBUTTONS[i]-> button_press == 1)) {
            MUXBUTTONS[i]->B4way = 2;
            MUXBUTTONS[i]->button_press = 2;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 40, channel);


          }

          else if  ((MUXBUTTONS[i]->B4way == 2 ) && (MUXBUTTONS[i]-> button_press == 2)) {
            MUXBUTTONS[i]->B4way = 3;
            MUXBUTTONS[i]->button_press = 3;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 80, channel);


          }

          else  if  ((MUXBUTTONS[i]->B4way == 3 ) && (MUXBUTTONS[i]-> button_press == 3)) {
            MUXBUTTONS[i]->B4way = 4;
            MUXBUTTONS[i]->button_press = 4;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 120, channel);


          }


          else if ((MUXBUTTONS[i]->B4way == 4 ) && (MUXBUTTONS[i]-> button_press == 4)) {
            MUXBUTTONS[i]->B4way = 3;
            MUXBUTTONS[i]->button_press = 5;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 80, channel);


          }

          else if ((MUXBUTTONS[i]->B4way == 3 ) && (MUXBUTTONS[i]-> button_press == 5)) {
            MUXBUTTONS[i]->B4way = 0;
            MUXBUTTONS[i]->button_press = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 40, channel);

          }


          //5 way button cycle
          break;

        case 5:
          if ((MUXBUTTONS[i]->B5way == 0) && (MUXBUTTONS[i]-> button_press == 0)) {
            MUXBUTTONS[i]->B5way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);

          }

          else  if ((MUXBUTTONS[i]->B5way == 1 ) && (MUXBUTTONS[i]-> button_press == 1)) {
            MUXBUTTONS[i]->B5way = 2;
            MUXBUTTONS[i]->button_press = 2;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 30, channel);

          }

          else if  ((MUXBUTTONS[i]->B5way == 2 ) && (MUXBUTTONS[i]-> button_press == 2)) {
            MUXBUTTONS[i]->B5way = 3;
            MUXBUTTONS[i]->button_press = 3;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 60, channel);

          }

          else  if  ((MUXBUTTONS[i]->B5way == 3 ) && (MUXBUTTONS[i]-> button_press == 3)) {
            MUXBUTTONS[i]->B5way = 4;
            MUXBUTTONS[i]->button_press = 4;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 90, channel);

          }

          else if ((MUXBUTTONS[i]->B5way == 4 ) && (MUXBUTTONS[i]-> button_press == 4)) {
            MUXBUTTONS[i]->B5way = 5;
            MUXBUTTONS[i]->button_press = 5;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 120, channel);


          }

          else if ((MUXBUTTONS[i]->B5way == 5 ) && (MUXBUTTONS[i]-> button_press == 5)) {
            MUXBUTTONS[i]->B5way = 4;
            MUXBUTTONS[i]->button_press = 6;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 90, channel);


          }

          else if ((MUXBUTTONS[i]->B5way == 4 ) && (MUXBUTTONS[i]-> button_press == 6)) {
            MUXBUTTONS[i]->B5way = 3;
            MUXBUTTONS[i]->button_press = 7;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 60, channel);


          }

          else if ((MUXBUTTONS[i]->B5way == 3 ) && (MUXBUTTONS[i]-> button_press == 7)) {
            MUXBUTTONS[i]->B5way = 0;
            MUXBUTTONS[i]->button_press = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 30, channel);

        }
      }
    }
  }
}
//**************************** End Code *****************************************
 
This might be useful: https://github.com/tttapa/Control-Surface/issues/241#issuecomment-660960589
It does roughly the same as the code you're using now (except the 3-way and 4-way switches), but with significantly simpler and shorter code.

To improve your current code, move the updating of the LEDs into a separate function and use arrays and for loops instead of the duplicated pieces of code that handle the LEDs.

Pieter

Thank you Pieter for you guidance ..took me a while but I figured it out and have a great feeling of satisfaction that I'm now writing better code. Its much tidier with out all the repetitive typing :)

Code:
#include "Controller.h"

/*************************************************************
  TAL UNO LX Controller WITH CYCLING 3/4/5/ WAY BUTTONS & LED Toggles

  Iain Dunn 2021 version 1.0 (based on notes and Volts and Massijam code for Teensy)

  www.notesandvolts.com
  https://github.com/maasijam/model_d_controller


  For Teensy LC
 *************************************************************/


//************************************************************
//***SET THE NUMBER OF CONTROLS USED**************************
//************************************************************


//---How many push buttons are connected to a multiplexer?---------
byte NUMBER_MUX_BUTTONS = 23;

//---How many potentiometers are connected to a multiplexer?--
byte NUMBER_MUX_POTS = 32;



//***ANY MULTIPLEXERS? (74HC4067)************************************
//MUX address pins must be connected to Teensy pins 2,3,4,5
//Mux NAME (OUTPUT PIN, , How Many Mux Pins?(8 or 16) , Is It Analog?);
//*******************************************************************

Mux M1(0, 16, false); //Digital multiplexer on Teensy pin 0
Mux M2(1, 16 , false); //Digital multiplexer on Teensy pin 1
Mux M3(A0, 16, true); //Analog multiplexer on Arduino analog pin A0
Mux M4(A1, 16, true); //Analog multiplexer on Arduino analog pin A1



//***DEFINE BUTTONS CONNECTED TO MULTIPLEXER*************************
//Button::Button(Mux mux, byte muxpin, byte command, byte value, byte channel, byte debounce)
//** Command parameter 0=NOTE  1=CC  2=Toggle CC  3= 3way 4= 4way 5 = 5way switch 6 LED Toggle

Button MBU1 (M1, 0, 3, 3, 1, 10);
Button MBU2 (M1, 1, 2, 9, 1, 10);
Button MBU3 (M1, 2, 2, 14, 1, 10);
Button MBU4 (M1, 3, 2, 15, 1, 10);
Button MBU5 (M1, 4, 2, 16, 1, 10);
Button MBU6 (M1, 5, 2, 17, 1, 10);
Button MBU7 (M1, 6, 2, 18, 1, 10);
Button MBU8 (M1, 7, 2, 19, 1, 10);
Button MBU9 (M1, 8, 3, 20, 1, 10);
Button MBU10(M1, 9, 3, 21, 1, 10);
Button MBU11(M1, 10, 5, 22, 1, 10);
Button MBU12(M1, 11, 2, 23, 1, 10);
Button MBU13(M1, 12, 2, 102, 1, 10);
Button MBU14(M1, 13, 2, 103, 1, 10);
Button MBU15(M1, 14, 2, 104, 1, 10);
Button MBU16(M1, 15, 2, 105, 1, 10);
Button MBU17(M2, 0, 2, 106, 1, 10);
Button MBU18(M2, 1, 2, 107, 1, 10);
Button MBU19(M2, 2, 2, 108, 1, 10);
Button MBU20(M2, 3, 4, 109, 1, 10);
Button MBU21(M2, 4, 3, 110, 1, 10);
Button MBU22(M2, 5, 3, 111, 1, 10);
Button MBU23(M2, 6, 2, 112, 1, 10);


//*******************************************************************
//Add multiplexed buttons used to array below like this->  Button *MUXBUTTONS[] {&MBU1, &MBU2, &MBU3, &MBU4, &MBU5, &MBU6.....};
Button *MUXBUTTONS[] {&MBU1, &MBU2, &MBU3, &MBU4, &MBU5, &MBU6, &MBU7, &MBU8, &MBU9, &MBU10, &MBU11, &MBU12, &MBU13, &MBU14, &MBU15, &MBU16,
         &MBU17, &MBU18, &MBU19, &MBU20, &MBU21, &MBU22, &MBU23
};

//***DEFINE POTENTIOMETERS CONNECTED TO MULTIPLEXER*******************
//Pot::Pot(Mux mux, byte muxpin, byte command, byte control, byte channel)
//**Command parameter is for future use**

Pot MPO1 (M3, 0, 0, 24, 1);
Pot MPO2 (M3, 1, 0, 25, 1);
Pot MPO3 (M3, 2, 0, 26, 1);
Pot MPO4 (M3, 3, 0, 27, 1);
Pot MPO5 (M3, 4, 0, 28, 1);
Pot MPO6 (M3, 5, 0, 29, 1);
Pot MPO7 (M3, 6, 0, 30, 1);
Pot MPO8 (M3, 7, 0, 31, 1);
Pot MPO9 (M3, 8, 0, 33, 1);
Pot MPO10(M3, 9, 0, 34, 1);
Pot MPO11(M3, 10, 0, 35, 1);
Pot MPO12(M3, 11, 0, 36, 1);
Pot MPO13(M3, 12, 0, 37, 1);
Pot MPO14(M3, 13, 0, 38, 1);
Pot MPO15(M3, 14, 0, 39, 1);
Pot MPO16(M3, 15, 0, 40, 1);
Pot MPO17(M4, 0, 0, 41, 1);
Pot MPO18(M4, 1, 0, 42, 1);
Pot MPO19(M4, 2, 0, 43, 1);
Pot MPO20(M4, 3, 0, 44 , 1);
Pot MPO21(M4, 4, 0, 45 , 1);
Pot MPO22(M4, 5, 0, 46 , 1);
Pot MPO23(M4, 6, 0, 47 , 1);
Pot MPO24(M4, 7, 0, 48, 1);
Pot MPO25(M4, 8, 0, 49, 1);
Pot MPO26(M4, 9, 0, 50, 1);
Pot MPO27(M4, 10, 0, 51 , 1);
Pot MPO28(M4, 11, 0, 52, 1);
Pot MPO29(M4, 12, 0, 53 , 1);
Pot MPO30(M4, 13, 0, 54 , 1);
Pot MPO31(M4, 14, 0, 55 , 1);
Pot MPO32(M4, 15, 0, 56 , 1);




//Add multiplexed pots used to array below like this->  Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6.....};
Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6, &MPO7, &MPO8, &MPO9, &MPO10, &MPO11, &MPO12, &MPO13, &MPO14, &MPO15, &MPO16, &MPO17, &MPO18, &MPO19, &MPO20, &MPO21, &MPO22, &MPO23, &MPO24
  , &MPO25, &MPO26, &MPO27, &MPO28, &MPO29, &MPO30, &MPO31, &MPO32
};

//*******************************************************************

const int channel = 1; // MIDI channel

const int ledPin[] = {6, 7, 8, 9, 10, 11, 12, 18, 23, 22, 21 , 20, 19};
const int LEDcount =13;

void setup() {

for (int i = 0 ;i < LEDcount ;i++){
  pinMode (ledPin[i],OUTPUT);
  digitalWrite(ledPin[i], LOW);

    }
  }

void loop(){ 
  if (NUMBER_MUX_POTS != 0) updateMuxPots();

  if (NUMBER_MUX_BUTTONS != 0) updateMuxButtons();

  updateLEDstatus ();

  while (usbMIDI.read()) {
    // controllers must call .read() to keep the queue clear even if they are not responding to MIDI
     }
}

//***********************************************************************
void updateMuxPots() {
  for (int i = 0; i < NUMBER_MUX_POTS; i = i + 1) {
    MUXPOTS[i]->muxUpdate();
    byte potmessage = MUXPOTS[i]->getValue();
    if (potmessage != 255) {
      usbMIDI.sendControlChange(MUXPOTS[i]->Pcontrol, potmessage, channel);
    }
  }
}


//*******************************************************************
void updateMuxButtons() {

  // Cycle through Mux Button array
  for (int i = 0; i < NUMBER_MUX_BUTTONS; i = i + 1) {

    MUXBUTTONS[i]->muxUpdate();
    byte message = MUXBUTTONS[i]->getValue();

    //  Button is pressed
    if (message == 0) {
//*************************Toggle Switch*******************************
      switch (MUXBUTTONS[i]->Bcommand) {
        case 2: //Toggle
          if (MUXBUTTONS[i]->Btoggle == 0) {
            MUXBUTTONS[i]->Btoggle = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127, channel);
          }
          else if (MUXBUTTONS[i]->Btoggle == 1) {
            MUXBUTTONS[i]->Btoggle = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);
          }
          break;
//********************* 3 way button cycle ****************************
        case 3:
          if ((MUXBUTTONS[i]->B3way == 0) && (MUXBUTTONS[i]-> button_press == 0 )) {
            MUXBUTTONS[i]->B3way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 1) && (MUXBUTTONS[i]-> button_press == 1 )) {
            MUXBUTTONS[i]->B3way = 2;
            MUXBUTTONS[i]->button_press = 2;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 55, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 2) && (MUXBUTTONS[i]-> button_press == 2 )) {
            MUXBUTTONS[i]->B3way = 3;
            MUXBUTTONS[i]->button_press = 3;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127, channel);

          }

          else  if ((MUXBUTTONS[i]->B3way == 3) && (MUXBUTTONS[i]-> button_press == 3 )) {
            MUXBUTTONS[i]->B3way = 0;
            MUXBUTTONS[i]->button_press = 0;

            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 55, channel);

          }

          break;

//******************************** 4 way button cycle***************************************
        case 4:
          if ((MUXBUTTONS[i]->B4way == 0) && (MUXBUTTONS[i]-> button_press == 0)) {
            MUXBUTTONS[i]->B4way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);
          }
          
          else  if ((MUXBUTTONS[i]->B4way == 1 ) && (MUXBUTTONS[i]-> button_press == 1)) {
            MUXBUTTONS[i]->B4way = 2;
            MUXBUTTONS[i]->button_press = 2;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 40, channel);
          }
          
          else if  ((MUXBUTTONS[i]->B4way == 2 ) && (MUXBUTTONS[i]-> button_press == 2)) {
            MUXBUTTONS[i]->B4way = 3;
            MUXBUTTONS[i]->button_press = 3;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 80, channel);
          }
          
          else  if  ((MUXBUTTONS[i]->B4way == 3 ) && (MUXBUTTONS[i]-> button_press == 3)) {
            MUXBUTTONS[i]->B4way = 4;
            MUXBUTTONS[i]->button_press = 4;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 120, channel);
          }
          
          else if ((MUXBUTTONS[i]->B4way == 4 ) && (MUXBUTTONS[i]-> button_press == 4)) {
            MUXBUTTONS[i]->B4way = 3;
            MUXBUTTONS[i]->button_press = 5;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 80, channel);
          }
          
          else if ((MUXBUTTONS[i]->B4way == 3 ) && (MUXBUTTONS[i]-> button_press == 5)) {
            MUXBUTTONS[i]->B4way = 0;
            MUXBUTTONS[i]->button_press = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 40, channel);
          }

           break;
//******************************5 way button cycle******************************************
      
        case 5:
          if ((MUXBUTTONS[i]->B5way == 0) && (MUXBUTTONS[i]-> button_press == 0)) {
            MUXBUTTONS[i]->B5way = 1;
            MUXBUTTONS[i]->button_press = 1;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, channel);
          }

          else  if ((MUXBUTTONS[i]->B5way == 1 ) && (MUXBUTTONS[i]-> button_press == 1)) {
            MUXBUTTONS[i]->B5way = 2;
            MUXBUTTONS[i]->button_press = 2;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 30, channel);
          }

          else if  ((MUXBUTTONS[i]->B5way == 2 ) && (MUXBUTTONS[i]-> button_press == 2)) {
            MUXBUTTONS[i]->B5way = 3;
            MUXBUTTONS[i]->button_press = 3;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 60, channel);
          }

          else  if  ((MUXBUTTONS[i]->B5way == 3 ) && (MUXBUTTONS[i]-> button_press == 3)) {
            MUXBUTTONS[i]->B5way = 4;
            MUXBUTTONS[i]->button_press = 4;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 90, channel);
          }

          else if ((MUXBUTTONS[i]->B5way == 4 ) && (MUXBUTTONS[i]-> button_press == 4)) {
            MUXBUTTONS[i]->B5way = 5;
            MUXBUTTONS[i]->button_press = 5;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 120, channel);
          }

          else if ((MUXBUTTONS[i]->B5way == 5 ) && (MUXBUTTONS[i]-> button_press == 5)) {
            MUXBUTTONS[i]->B5way = 4;
            MUXBUTTONS[i]->button_press = 6;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 90, channel);
          }

          else if ((MUXBUTTONS[i]->B5way == 4 ) && (MUXBUTTONS[i]-> button_press == 6)) {
            MUXBUTTONS[i]->B5way = 3;
            MUXBUTTONS[i]->button_press = 7;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 60, channel);
          }

          else if ((MUXBUTTONS[i]->B5way == 3 ) && (MUXBUTTONS[i]-> button_press == 7)) {
            MUXBUTTONS[i]->B5way = 0;
            MUXBUTTONS[i]->button_press = 0;
            usbMIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 30, channel);        
        }
      }
    }
  }
}

//*******************Toggle button LED Updates *******************************
void updateLEDstatus() { 
       
          for (int i=0; i<3; i++){
          if  (MUXBUTTONS[i+1]->Btoggle == 1) {
            digitalWrite(ledPin[i], HIGH);
          }          
           else digitalWrite(ledPin[i], LOW);
          }
          

//********************Chorus LEDS**************************
           for (int i=0; i<2; i++){
          if  (MUXBUTTONS[i+5]->Btoggle == 1) {
            digitalWrite(ledPin[i+3], HIGH);
          }          
           else digitalWrite(ledPin[i+3], LOW);
          }    
        
//*************************LFO Mode************************
           for (int i=0; i<2; i++){
          if  (MUXBUTTONS[i+11]->Btoggle == 1) {
            digitalWrite(ledPin[i+5], HIGH);
          }          
           else digitalWrite(ledPin[i+5], LOW);
          }
           
//********************************************************
            for (int i=0; i<5; i++){
          if  (MUXBUTTONS[i+14]->Btoggle == 1) {
            digitalWrite(ledPin[i+7], HIGH);
          }          
           else digitalWrite(ledPin[i+7], LOW);
          }

          if  (MUXBUTTONS[22]->Btoggle == 1) {
            digitalWrite(ledPin[12], HIGH);
          }          
           else digitalWrite(ledPin[12], LOW);
          }       
       
    
           



//**************************** End Code *****************************************
 
Back
Top