Professional Documents
Culture Documents
h>
#include "Controller.h"
//***KEYPAD***************************************************
#include <Keypad.h>
char hexaKeys[ROWS][COLS] = {
{'0','1','2','3'},
{'4','5','6','7'},
{'8','9','A','B'},
{'C','D','E','F'}
};
byte rowPins[ROWS] = {50, 46, 42, 38}; //connect to the row pinouts of
the keypad
byte colPins[COLS] = {34, 30, 26, 22}; //connect to the column pinouts of
the keypad
MIDI_CREATE_DEFAULT_INSTANCE();
//************************************************************
//***SET THE NUMBER OF CONTROLS USED**************************
//************************************************************
//---How many buttons are connected directly to pins?---------
byte NUMBER_BUTTONS = 0;
//---How many potentiometers are connected directly to pins?--
byte NUMBER_POTS = 16;
//---How many buttons are connected to a multiplexer?---------
byte NUMBER_MUX_BUTTONS = 0;
//---How many potentiometers are connected to a multiplexer?--
byte NUMBER_MUX_POTS = 0;
//************************************************************
//*******************************************************************
///////////////////////////////////////////
int ledPin0 = 13;
void setup() {
MIDI.begin(MIDI_CHANNEL_OFF);
pinMode(ledPin0, OUTPUT);
void loop() {
//*****************************************************************
void updateButtons() {
// Button is pressed
if (message == 0) {
switch (BUTTONS[i]->Bcommand) {
case 0: //Note
MIDI.sendNoteOn(BUTTONS[i]->Bvalue, 127, BUTTONS[i]->Bchannel);
break;
case 1: //CC
MIDI.sendControlChange(BUTTONS[i]->Bvalue, 127, BUTTONS[i]-
>Bchannel);
break;
case 2: //Toggle
if (BUTTONS[i]->Btoggle == 0) {
MIDI.sendControlChange(BUTTONS[i]->Bvalue, 127, BUTTONS[i]-
>Bchannel);
BUTTONS[i]->Btoggle = 1;
}
else if (BUTTONS[i]->Btoggle == 1) {
MIDI.sendControlChange(BUTTONS[i]->Bvalue, 0, BUTTONS[i]-
>Bchannel);
BUTTONS[i]->Btoggle = 0;
}
break;
case 3: //nrpn on off
MIDI.sendControlChange(99, BUTTONS[i]->Bvalue, BUTTONS[i]-
>Bchannel);
MIDI.sendControlChange(98, BUTTONS[i]->Bvalue2, BUTTONS[i]-
>Bchannel);
MIDI.sendControlChange(06, 127, 1);
break;
}
}
MUXBUTTONS[i]->muxUpdate();
byte message = MUXBUTTONS[i]->getValue();
// Button is pressed
if (message == 0) {
switch (MUXBUTTONS[i]->Bcommand) {
case 0: //Note
MIDI.sendNoteOn(MUXBUTTONS[i]->Bvalue, 127, MUXBUTTONS[i]-
>Bchannel);
break;
case 1: //CC
MIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127,
MUXBUTTONS[i]->Bchannel);
break;
case 2: //Toggle
if (MUXBUTTONS[i]->Btoggle == 0) {
MIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 127,
MUXBUTTONS[i]->Bchannel);
MUXBUTTONS[i]->Btoggle = 1;
}
else if (MUXBUTTONS[i]->Btoggle == 1) {
MIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0,
MUXBUTTONS[i]->Bchannel);
MUXBUTTONS[i]->Btoggle = 0;
}
break;
}
}
// Button is not pressed
if (message == 1) {
switch (MUXBUTTONS[i]->Bcommand) {
case 0:
MIDI.sendNoteOff(MUXBUTTONS[i]->Bvalue, 0, MUXBUTTONS[i]-
>Bchannel);
break;
case 1:
MIDI.sendControlChange(MUXBUTTONS[i]->Bvalue, 0, MUXBUTTONS[i]-
>Bchannel);
break;
}
}
}
}
//***********************************************************************
/*void updatePots() {
for (int i = 0; i < NUMBER_POTS; i = i + 1) {
byte potmessage = POTS[i]->getValue();
if (potmessage != 255) MIDI.sendControlChange(POTS[i]->Pcontrol,
potmessage, POTS[i]->Pchannel);
}
}*/
void updatePots() {
for (int i = 0; i < NUMBER_POTS; i = i + 1) {
byte potmessage = POTS[i]->getValue();
if (potmessage != 255) {
switch (POTS[i]->Pcommand) {
case 0: //CC
if (POTS[i]->Pcontrol == 19 || POTS[i]->Pcontrol == 29 ||
POTS[i]->Pcontrol == 41) {
CalculaDigitos(potmessage/1.77);
MIDI.sendControlChange(POTS[i]->Pcontrol, (potmessage/1.77),
POTS[i]->Pchannel);
}else if(POTS[i]->Pcontrol == 28 || POTS[i]->Pcontrol == 40 ||
POTS[i]->Pcontrol == 50) {
MIDI.sendControlChange(POTS[i]->Pcontrol,
((potmessage/5.1)+52), POTS[i]->Pchannel);
CalculaDigitos((potmessage/5.1)+52);
}else if(POTS[i]->Pcontrol == 17) {
MIDI.sendControlChange(POTS[i]->Pcontrol, (potmessage/1.05),
POTS[i]->Pchannel);
CalculaDigitos(potmessage/1.05);
}else if(POTS[i]->Pcontrol == 57) {
MIDI.sendControlChange(POTS[i]->Pcontrol, (potmessage/31.75),
POTS[i]->Pchannel);
CalculaDigitos(potmessage/31.75);
}else if(POTS[i]->Pcontrol == 58 || POTS[i]->Pcontrol == 59) {
MIDI.sendControlChange(POTS[i]->Pcontrol,
((potmessage/4.23)+52), POTS[i]->Pchannel);
CalculaDigitos((potmessage/4.23)+52);
}else if(POTS[i]->Pcontrol == 60) {
MIDI.sendControlChange(POTS[i]->Pcontrol, (potmessage/21.2),
POTS[i]->Pchannel);
CalculaDigitos(potmessage/21.2);
}else if(POTS[i]->Pcontrol == 65 || POTS[i]->Pcontrol == 81) {
MIDI.sendControlChange(POTS[i]->Pcontrol, (potmessage/18.3),
POTS[i]->Pchannel);
CalculaDigitos(potmessage/18.3);
}else if(POTS[i]->Pcontrol == 68 || POTS[i]->Pcontrol == 82) {
MIDI.sendControlChange(POTS[i]->Pcontrol, (potmessage/9.1),
POTS[i]->Pchannel);
CalculaDigitos(potmessage/9.1);
}else{
MIDI.sendControlChange(POTS[i]->Pcontrol, potmessage,
POTS[i]->Pchannel);
CalculaDigitos(potmessage);
}
break;
case 1: //NRpN
if(POTS[i]->Pcontrol == 0 && POTS[i]->Pcontrol2 == 70 ||
POTS[i]->Pcontrol == 0 && POTS[i]->Pcontrol2 == 79 || POTS[i]->Pcontrol
== 0 && POTS[i]->Pcontrol2 == 88) {
MIDI.sendControlChange(99, POTS[i]->Pcontrol, POTS[i]-
>Pchannel);
MIDI.sendControlChange(98, POTS[i]->Pcontrol2, POTS[i]-
>Pchannel);
MIDI.sendControlChange(06, potmessage/3.35, POTS[i]-
>Pchannel);
CalculaDigitos(potmessage/3.35);
}else if(POTS[i]->Pcontrol == 0 && POTS[i]->Pcontrol2 == 75 ||
POTS[i]->Pcontrol == 0 && POTS[i]->Pcontrol2 == 77 || POTS[i]->Pcontrol
== 0 && POTS[i]->Pcontrol2 == 84 || POTS[i]->Pcontrol == 0 && POTS[i]-
>Pcontrol2 == 86 || POTS[i]->Pcontrol == 0 && POTS[i]->Pcontrol2 == 93 ||
POTS[i]->Pcontrol == 0 && POTS[i]->Pcontrol2 == 95) {
MIDI.sendControlChange(99, POTS[i]->Pcontrol, POTS[i]-
>Pchannel);
MIDI.sendControlChange(98, POTS[i]->Pcontrol2, POTS[i]-
>Pchannel);
MIDI.sendControlChange(06, potmessage/3.53, POTS[i]-
>Pchannel);
CalculaDigitos(potmessage/3.53);
}else{
MIDI.sendControlChange(99, POTS[i]->Pcontrol, POTS[i]-
>Pchannel);
MIDI.sendControlChange(98, POTS[i]->Pcontrol2, POTS[i]-
>Pchannel);
MIDI.sendControlChange(06, potmessage, POTS[i]->Pchannel);
CalculaDigitos(potmessage);
}
break;
}
}
}
}
/*//*********************************************************************
**
void updateMuxPots() {
for (int i = 0; i < NUMBER_MUX_POTS; i = i + 1) {
MUXPOTS[i]->muxUpdate();
byte potmessage = MUXPOTS[i]->getValue();
if (potmessage != 255) MIDI.sendControlChange(MUXPOTS[i]->Pcontrol,
potmessage, MUXPOTS[i]->Pchannel);
}
}*/
void updateMuxPots() {
for (int i = 0; i < NUMBER_MUX_POTS; i = i + 1) {
MUXPOTS[i]->muxUpdate();
byte potmessage = MUXPOTS[i]->getValue();
if (potmessage != 255) {
switch (MUXPOTS[i]->Pcommand) {
case 0: //CC
MIDI.sendControlChange(MUXPOTS[i]->Pcontrol, potmessage,
MUXPOTS[i]->Pchannel);
break;
case 1: //NRpN
MIDI.sendControlChange(99, MUXPOTS[i]->Pcontrol, MUXPOTS[i]-
>Pchannel);
MIDI.sendControlChange(98, MUXPOTS[i]->Pcontrol2, MUXPOTS[i]-
>Pchannel);
MIDI.sendControlChange(06, potmessage, MUXPOTS[i]->Pchannel);
break;
}
}
}
}
//**********************************************************************
void CalculaDigitos( int Num) {
int Digit0 = Num %10 ;
int Digit1 = (Num % 100) / 10;
int Digit2 = (Num % 1000) / 100 ;
int Digit3 = Num / 1000 ;
Display(3 , Digit3);
Display(2 , Digit2);
Display(1 , Digit1);
Display(0 , Digit0);
}
void CalculaDigitos2( char Num2) {
int Digit0 = Num2;
if(Digit0 > 47 && Digit0 < 58) { //this covers 0-9
Digit0 = Digit0 - 48;
}else if (Digit0 > 64 && Digit0 < 71) { // this covers A-F
Digit0 = Digit0 - 55;
}
Display(3 , Digit0);
}
void Display(int pos, int N) {
digitalWrite(9 ,LOW); // Apaga todos los digitos
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);