Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
Software apps and online services | ||||||
![]() |
| |||||
Hand tools and fabrication machines | ||||||
![]() |
| |||||
#include <MIDI.h> // Add Midi Library
//---------------------------------------------------------------------------
//----------------------------for signalisations work:----------------------
// Variables will chang
int ledState = LOW; // ledState used to set the LED
int midi_channel = 1; // jesli ma dziłac na kanale 1
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change:
const long interval = 1000;
//-------------------------------------------------------
MIDI_CREATE_DEFAULT_INSTANCE();
// define adress pins for adressed 74HC138
#define LED_BUILTIN_A4 A4
#define pin_adress0 10 //A0
#define pin_adress1 12 //A1
#define pin_adress2 A0 //A2
#define pin_E1_man1 A2 //A3
#define pin_E1_man2 8 //A4
#define pin_E1_man3 A5
#define pin_E1_man4 6 // 10
#define pin_E1_man5 2 //11
//Pin connected to ST_CP of 74HC595
#define latchPin 12 //A1
//Pin connected to SH_CP of 74HC595
#define clockPin 10 //A0
////Pin connected to DS of 74HC595
#define dataPin 4 //12
byte g = 0;
byte h = 0;
byte j = 0;
byte k = 0;
byte l = 0;
byte m = 0;
byte n = 0;
byte o = 0;
byte p = 0;
#define LiczbaKlawiszy (61)
boolean Key[LiczbaKlawiszy];
boolean Key2[LiczbaKlawiszy];
boolean Key3[LiczbaKlawiszy];
boolean Key4[LiczbaKlawiszy];
boolean Key5[LiczbaKlawiszy];
boolean Key_last[LiczbaKlawiszy];
boolean Key2_last[LiczbaKlawiszy];
boolean Key3_last[LiczbaKlawiszy];
boolean Key4_last[LiczbaKlawiszy];
boolean Key5_last[LiczbaKlawiszy];
int pin_data[] = {3,5,7,9,11,13,A1,A3}; // define data pins
//int pin_data[] = {A3,A1,13,11,9,7,5,3}; // define data pins
//int pin_data[] = {2,3,4,5,6,7,8,9}; // define data pins
int vol = 90; // walue velocity
int channel_on = 0x90; // kanal 1 - initial variables for midi channel
int channel_off = 0x80; // kanal 1 - initial variables for midi channel
// int channel_on = 0x91; // kanal 2
// int channel_off = 0x81; // kanal 2
// int channel_on = 0x92; // kanal 3
// int channel_off = 0x81; // kanal 3
//int channel_on = 0x93; // kanal 4
//int channel_off = 0x83; // kanal 4
// int channel_on = 0x94; // kanal 5
// int channel_off = 0x84; // kanal 5
// int channel_on = 0x95; // kanal 6
// int channel_off = 0x85; // kanal 6
// int channel_on = 0x96; // kanal 7
// int channel_off = 0x86; // kanal 7
// int channel_on = 0x97; // kanal 8
// int channel_off = 0x87; // kanal 8
void setup() {
MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library.
MIDI.turnThruOff ();
// OMNI sets it to listen to all channels.. MIDI.begin(2) would set it
// to respond to notes on channel 2 only.
MIDI.setHandleNoteOn(MyHandleNoteOn); // This is important!! This command
// tells the Midi Library which function you want to call when a NOTE ON command
// is received. In this case it's "MyHandleNoteOn".
MIDI.setHandleNoteOff(MyHandleNoteOff); // This command tells the Midi Library
// to call "MyHandleNoteOff" when a NOTE OFF command is received.
// MIDI.setHandleControlChange(MyHandleControlChange);
Serial.begin (31250); //(31250); // setup serial for MIDI
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
Key[i] = 1;
Key2[i] = 1;
Key3[i] = 1;
Key4[i] = 1;
Key5[i] = 1;
Key_last[i] = 1;
Key2_last[i] = 1;
Key3_last[i] = 1;
Key4_last[i] = 1;
Key5_last[i] = 1;
}
// define input pin_data
for (int i = 0; i <= 7; i++) {
pinMode(pin_data[i], INPUT_PULLUP);
}
//define output pin_adress 74HC138)
pinMode(pin_adress0, OUTPUT);
digitalWrite(pin_adress0, HIGH);
pinMode(pin_adress1, OUTPUT);
digitalWrite(pin_adress1, HIGH);
pinMode(pin_adress2, OUTPUT);
digitalWrite(pin_adress2, HIGH);
//define output pin_E1 ( selest 74HC138) select manual
pinMode( pin_E1_man1, OUTPUT);
digitalWrite( pin_E1_man1, HIGH);
pinMode( pin_E1_man2, OUTPUT);
digitalWrite( pin_E1_man2, HIGH);
pinMode( pin_E1_man3, OUTPUT);
digitalWrite( pin_E1_man3, HIGH);
pinMode( pin_E1_man4, OUTPUT);
digitalWrite( pin_E1_man4, HIGH);
pinMode( pin_E1_man5, OUTPUT);
digitalWrite( pin_E1_man5, HIGH);
pinMode( dataPin, OUTPUT);
digitalWrite( dataPin, LOW);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
// define output LED
pinMode(LED_BUILTIN_A4, OUTPUT);
}
void loop() {
MIDI.read(); // Continuously check if Midi data has been received.
scaner();
//**************************************
// moduł sygnalizacji działania
//----------------------------------------------------------
unsigned long currentMillis = millis();
// szybkość działania programu
// Serial.println(currentMillis);
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(LED_BUILTIN_A4, ledState);
}
}
void noteOn(byte cmd, byte data1, byte data2) {
Serial.write(cmd);
Serial.write(data1);
Serial.write(data2);
digitalWrite(LED_BUILTIN_A4, HIGH);
delay(5);
digitalWrite(LED_BUILTIN_A4, LOW);
}
void MyHandleNoteOn(byte channel, byte pitch, byte velocity) {
if (channel == midi_channel) {
digitalWrite( pin_E1_man1, LOW);
digitalWrite( pin_E1_man2, LOW);
if (pitch > 35 and pitch < 44) {
bitSet(g, pitch - 36);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 43 and pitch < 52) {
bitSet(h, pitch - 44);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 51 and pitch < 60) {
bitSet(j, pitch - 52);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 59 and pitch < 68) {
bitSet(k, pitch - 60);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 67 and pitch < 76) {
bitSet(l, pitch - 68);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 75 and pitch < 84) {
bitSet(m, pitch - 76);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 83 and pitch < 92) {
bitSet(n, pitch - 84);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 91 and pitch < 100) {
bitSet(o, pitch - 92);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 99 and pitch < 108) {
bitSet(p, pitch - 100);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
}
return;
}
// MyHandleNoteOFF is the function that will be called by the Midi Library
// when a MIDI NOTE OFF message is received.
// * A NOTE ON message with Velocity = 0 will be treated as a NOTE OFF message *
// It will be passed bytes for Channel, Pitch, and Velocity
void MyHandleNoteOff(byte channel, byte pitch, byte velocity) {
if (channel == midi_channel) {
digitalWrite( pin_E1_man1, LOW);
digitalWrite( pin_E1_man2, LOW);
if (pitch > 35 and pitch < 44) {
bitClear(g, pitch - 36);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 43 and pitch < 52) {
bitClear(h, pitch - 44);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 51 and pitch < 60) {
bitClear(j, pitch - 52);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 59 and pitch < 68) {
bitClear(k, pitch - 60);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 67 and pitch < 76) {
bitClear(l, pitch - 68);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 75 and pitch < 84) {
bitClear(m, pitch - 76);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 83 and pitch < 92) {
bitClear(n, pitch - 84);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 91 and pitch < 100) {
bitClear(o, pitch - 92);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
if (pitch > 99 and pitch < 108) {
bitClear(p, pitch - 100);
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
}
return;
}
void zapiszdo595(byte q1,byte q2, byte q3, byte q4, byte q5, byte q6, byte q7, byte q8, byte q9 ) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, q9);
shiftOut(dataPin, clockPin, MSBFIRST, q8);
shiftOut(dataPin, clockPin, MSBFIRST, q7);
shiftOut(dataPin, clockPin, MSBFIRST, q6);
shiftOut(dataPin, clockPin, MSBFIRST, q5);
shiftOut(dataPin, clockPin, MSBFIRST, q4);
shiftOut(dataPin, clockPin, MSBFIRST, q3);
shiftOut(dataPin, clockPin, MSBFIRST, q2);
shiftOut(dataPin, clockPin, MSBFIRST, q1);
digitalWrite(latchPin, HIGH);
}
void zatrzask_off(){
g=0;
h=0;
j=0;
k=0;
l=0;
m=0;
n=0;
o=0;
p=0;
zapiszdo595(g, h, j, k, l, m, n, o, p);
}
void scaner() {
//Obsługa man II
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, LOW);
digitalWrite( pin_E1_man3, HIGH);
digitalWrite( pin_E1_man4, HIGH);
digitalWrite( pin_E1_man5, HIGH);// właczenie II man do odczytu
channel_on = 0x91; // ustawienie kanałów dla II man - kanal 2
channel_off = 0x81; // kanal 2
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key2[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key2[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key2[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key2[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key2[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key2[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key2[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key2[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man II
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key2[i] != Key2_last[i] ) {
if(Key2[i] == 0) {
//noteOn(channel_on, 36+i, vol);
MIDI.sendNoteOn(36+i, 127, 2);
}
else {
//noteOn(channel_off, 36+i, 0x00);
//noteOn(channel_off, 36+i, 0x00);
MIDI.sendNoteOff(36+i, 0, 2);
}
}
}
//*****************************************
//Obsługa man III
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, HIGH);
digitalWrite( pin_E1_man3, LOW);
digitalWrite( pin_E1_man4, HIGH);
digitalWrite( pin_E1_man5, HIGH);// właczenie III man do odczytu
channel_on = 0x92; // ustawienie kanałów dla III man - kanal 3
channel_off = 0x82; // kanal 3
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key3[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key3[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key3[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key3[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key3[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key3[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key3[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key3[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man III
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key3[i] != Key3_last[i] ) {
if(Key3[i] == 0) {
noteOn(channel_on, 36+i, vol);
}
else {
noteOn(channel_off, 36+i, 0x00);
noteOn(channel_off, 36+i, 0x00);
}
}
}
//*****************************************
//Obsługa man IV
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, HIGH);
digitalWrite( pin_E1_man3, HIGH);
digitalWrite( pin_E1_man4, LOW);
digitalWrite( pin_E1_man5, HIGH);// właczenie III man do odczytu
channel_on = 0x93; // ustawienie kanałów dla IV man - kanal 4
channel_off = 0x83; // kanal 4
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key4[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key4[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key4[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key4[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key4[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key4[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key4[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key4[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man IV
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key4[i] != Key4_last[i] ) {
if(Key4[i] == 0) {
noteOn(channel_on, 36+i, vol);
}
else {
noteOn(channel_off, 36+i, 0x00);
noteOn(channel_off, 36+i, 0x00);
}
}
}
//*****************************************
//Obsługa man V
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, HIGH);
digitalWrite( pin_E1_man3, HIGH);
digitalWrite( pin_E1_man4, HIGH);
digitalWrite( pin_E1_man5, LOW);// właczenie III man do odczytu
channel_on = 0x94; // ustawienie kanałów dla IV man - kanal 4
channel_off = 0x84; // kanal 5
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key5[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key5[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key5[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key5[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key5[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key5[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key5[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key5[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man V
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key5[i] != Key5_last[i] ) {
if(Key5[i] == 0) {
noteOn(channel_on, 36+i, vol);
}
else {
noteOn(channel_off, 36+i, 0x00);
noteOn(channel_off, 36+i, 0x00);
}
}
}
//*****************************************************
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
Key_last[i] = Key[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key2_last[i] = Key2[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key3_last[i] = Key3[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key4_last[i] = Key4[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key5_last[i] = Key5[i];
}
//**************************************
// moduł sygnalizacji działania
//----------------------------------------------------------
unsigned long currentMillis = millis();
// szybkość działania programu
// Serial.println(currentMillis);
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(LED_BUILTIN_A4, ledState);
}
//---------------------------------------------------------------
}
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
// -----------------------------------------------------------------------------
// This function will be automatically called when a NoteOn is received.
// It must be a void-returning function with the correct parameters,
// see documentation here:
// https://github.com/FortySevenEffects/arduino_midi_library/wiki/Using-Callbacks
void handleNoteOn(byte channel, byte pitch, byte velocity)
{
// Do whatever you want when a note is pressed.
// Try to keep your callbacks short (no delays ect)
// otherwise it would slow down the loop() and have a bad impact
// on real-time performance.
}
void handleNoteOff(byte channel, byte pitch, byte velocity)
{
// Do something when the note is released.
// Note that NoteOn messages with 0 velocity are interpreted as NoteOffs.
}
// -----------------------------------------------------------------------------
//unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
int ledState = LOW;
// define adress pins for adressed 74HC138
#define pin_adress0 8 //A0
#define pin_adress1 6 //A1
#define pin_adress2 4 //A2
#define pin_E1_man1 10 //A3
#define pin_E1_man2 12 //A4
#define pin_E1_man3 A0 //A5
#define pin_E1_man4 A2 //10
#define pin_E1_man5 A5 //11
#define OE 2 //12
#define LED_BUILTIN_A4 A4
#define LiczbaKlawiszy (61)
boolean Key[LiczbaKlawiszy];
boolean Key2[LiczbaKlawiszy];
boolean Key3[LiczbaKlawiszy];
boolean Key4[LiczbaKlawiszy];
boolean Key5[LiczbaKlawiszy];
boolean Key_last[LiczbaKlawiszy];
boolean Key2_last[LiczbaKlawiszy];
boolean Key3_last[LiczbaKlawiszy];
boolean Key4_last[LiczbaKlawiszy];
boolean Key5_last[LiczbaKlawiszy];
int pin_data[] = {A3,A1,13,11,9,7,5,3}; // define data pins
//int pin_data[] = {2,3,4,5,6,7,8,9}; // define data pins
int vol = 90; // walue velocity
int channel_on = 1; // kanal 1 - initial variables for midi channel
int channel_off = 1; // kanal 1 - initial variables for midi channel
// int channel_on = 0x91; // kanal 2
// int channel_off = 0x81; // kanal 2
// int channel_on = 0x92; // kanal 3
// int channel_off = 0x81; // kanal 3
//int channel_on = 0x93; // kanal 4
//int channel_off = 0x83; // kanal 4
// int channel_on = 0x94; // kanal 5
// int channel_off = 0x84; // kanal 5
// int channel_on = 0x95; // kanal 6
// int channel_off = 0x85; // kanal 6
// int channel_on = 0x96; // kanal 7
// int channel_off = 0x86; // kanal 7
// int channel_on = 0x97; // kanal 8
// int channel_off = 0x87; // kanal 8
void setup()
{
// Connect the handleNoteOn function to the library,
// so it is called upon reception of a NoteOn.
MIDI.setHandleNoteOn(handleNoteOn); // Put only the name of the function
// Do the same for NoteOffs
MIDI.setHandleNoteOff(handleNoteOff);
// Initiate MIDI communications, listen to all channels
MIDI.begin(MIDI_CHANNEL_OMNI);
//Serial.begin (31250); //(115200); //(31250); // setup serial for MIDI
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
Key[i] = 1;
Key2[i] = 1;
Key3[i] = 1;
Key4[i] = 1;
Key5[i] = 1;
Key_last[i] = 1;
Key2_last[i] = 1;
Key3_last[i] = 1;
Key4_last[i] = 1;
Key5_last[i] = 1;
}
// define input pin_data
for (int i = 0; i <= 7; i++) {
pinMode(pin_data[i], INPUT_PULLUP);
}
//define output pin_adress 74HC138)
pinMode(pin_adress0, OUTPUT);
digitalWrite(pin_adress0, HIGH);
pinMode(pin_adress1, OUTPUT);
digitalWrite(pin_adress1, HIGH);
pinMode(pin_adress2, OUTPUT);
digitalWrite(pin_adress2, HIGH);
//define output pin_E1 ( selest 74HC138) select manual
pinMode( pin_E1_man1, OUTPUT);
digitalWrite( pin_E1_man1, HIGH);
pinMode( pin_E1_man2, OUTPUT);
digitalWrite( pin_E1_man2, HIGH);
pinMode( pin_E1_man3, OUTPUT);
digitalWrite( pin_E1_man3, HIGH);
pinMode( pin_E1_man4, OUTPUT);
digitalWrite( pin_E1_man4, HIGH);
pinMode( pin_E1_man5, OUTPUT);
digitalWrite( pin_E1_man5, HIGH);
// define output LED
pinMode( OE, OUTPUT);
digitalWrite( OE, LOW);
// define output LED
pinMode(LED_BUILTIN_A4, OUTPUT);
}
void loop()
{
// Call MIDI.read the fastest you can for real-time performance.
MIDI.read();
//**************************************
// moduł sygnalizacji działania
//----------------------------------------------------------
unsigned long currentMillis = millis();
// szybkość działania programu
// Serial.println(currentMillis);
if (currentMillis - previousMillis >= 1000) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(LED_BUILTIN_A4, ledState);
}
// There is no need to check if there are messages incoming
// if they are bound to a Callback function.
// The attached method will be called automatically
// when the corresponding message has been received.
//**************************************
// vol = analogRead(A5);
// vol = map(vol, 0, 1023, 0, 127);
//*****************************************
//Obsługa man I
digitalWrite( OE, LOW);
digitalWrite( pin_E1_man1, LOW);
digitalWrite( pin_E1_man2, HIGH);
digitalWrite( pin_E1_man3, HIGH);
digitalWrite( pin_E1_man4, LOW);
digitalWrite( pin_E1_man5, HIGH);// właczenie I man do odczytu
channel_on = 1; // setup variable chcnell for man. I kanal 1
channel_off = 1; // ustawienie zmiennych kanału midi dla I man. kanal 1
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key[i] != Key_last[i] ) {
if(Key[i] == 0) {
MIDI.sendNoteOn(36+i, vol, channel_on);
}
else {
MIDI.sendNoteOff(36+i, 00, channel_off);
MIDI.sendNoteOff(36+i, 00, channel_off);
}
}
}
//*****************************************
//Obsługa man II
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, LOW);
digitalWrite( pin_E1_man3, HIGH);
digitalWrite( pin_E1_man4, HIGH);
digitalWrite( pin_E1_man5, HIGH);// właczenie II man do odczytu
channel_on = 2; // ustawienie kanałów dla II man - kanal 2
channel_off = 2; // kanal 2
digitalWrite( OE, LOW);
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key2[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key2[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key2[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key2[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key2[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key2[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key2[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key2[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man II
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key2[i] != Key2_last[i] ) {
if(Key2[i] == 0) {
MIDI.sendNoteOn(36+i, vol, channel_on);
}
else {
MIDI.sendNoteOff(36+i, 00, channel_off);
MIDI.sendNoteOff(36+i, 00, channel_off);
}
}
}
//*****************************************
//Obsługa man III
digitalWrite( OE, LOW);
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, HIGH);
digitalWrite( pin_E1_man3, LOW);
digitalWrite( pin_E1_man4, HIGH);
digitalWrite( pin_E1_man5, HIGH);// właczenie III man do odczytu
channel_on = 3; // ustawienie kanałów dla III man - kanal 3
channel_off = 3; // kanal 3
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key3[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key3[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key3[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key3[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key3[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key3[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key3[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key3[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man III
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key3[i] != Key3_last[i] ) {
if(Key3[i] == 0) {
MIDI.sendNoteOn(36+i, vol, channel_on);
}
else {
MIDI.sendNoteOff(36+i, 00, channel_off);
MIDI.sendNoteOff(36+i, 00, channel_off);
}
}
}
//*****************************************
//Obsługa man IV
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, HIGH);
digitalWrite( pin_E1_man3, HIGH);
digitalWrite( pin_E1_man4, LOW);
digitalWrite( pin_E1_man5, HIGH);// właczenie III man do odczytu
channel_on = 4; // ustawienie kanałów dla IV man - kanal 4
channel_off = 4; // kanal 4
digitalWrite( OE, LOW);
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key4[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key4[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key4[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key4[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key4[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key4[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key4[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key4[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man IV
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key4[i] != Key4_last[i] ) {
if(Key4[i] == 0) {
MIDI.sendNoteOn(36+i, vol, channel_on);
}
else {
MIDI.sendNoteOff(36+i, 00, channel_off);
MIDI.sendNoteOff(36+i, 00, channel_off);
}
}
}
//*****************************************
//Obsługa man V albo pistony
digitalWrite( OE, HIGH);
digitalWrite( pin_E1_man1, HIGH);
digitalWrite( pin_E1_man2, HIGH); //for pistons
digitalWrite( pin_E1_man3, LOW);
digitalWrite( pin_E1_man4, HIGH);
digitalWrite( pin_E1_man5, LOW);// właczenie III man do odczytu
channel_on = 5; // ustawienie kanałów dla V man - kanal 5
channel_off = 5; // kanal 5
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 1-st (first) octet
for (int i = 0; i <= 7; i++) {
Key5[i+0*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, LOW); // read 2-st (second) octet
for (int i = 0; i <= 7; i++) {
Key5[i+1*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 3-st (thrid) octet
for (int i = 0; i <= 7; i++) {
Key5[i+2*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, LOW); // read 4-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key5[i+3*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 5-st (quad) octet
for (int i = 0; i <= 7; i++) {
Key5[i+4*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, LOW);
digitalWrite(pin_adress2, HIGH); // read 6-st (qwint) octet
for (int i = 0; i <= 7; i++) {
Key5[i+5*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, LOW);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 7-st (sext) octet
for (int i = 0; i <= 7; i++) {
Key5[i+6*8] = digitalRead(pin_data[i]);
}
digitalWrite(pin_adress0, HIGH);
digitalWrite(pin_adress1, HIGH);
digitalWrite(pin_adress2, HIGH); // read 8-st (sept) octet
for (int i = 0; i <= 7; i++) {
Key5[i+7*8] = digitalRead(pin_data[i]);
}
//****************************************************
// porównywanie odczytów i wysyłanie komunikatów midi dla man V albo pistony
//
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
if(Key5[i] != Key5_last[i] ) {
if(Key5[i] == 0) {
MIDI.sendNoteOn(36+i, vol, channel_on);
}
else {
MIDI.sendNoteOff(36+i, 00, channel_off);
MIDI.sendNoteOff(36+i, 00, channel_off);
}
}
}
//*****************************************************
for (int i = 0; i <= LiczbaKlawiszy -1; i++) {
Key_last[i] = Key[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key2_last[i] = Key2[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key3_last[i] = Key3[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key4_last[i] = Key4[i];
}
for (int i = 0; i <= LiczbaKlawiszy -1 ; i++) {
Key5_last[i] = Key5[i];
}
//**************************************
// moduł sygnalizacji działania
//----------------------------------------------------------
currentMillis = millis();
// szybkość działania programu
// Serial.println(currentMillis);
if (currentMillis - previousMillis >= 1000) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(LED_BUILTIN_A4, ledState);
}
}
/**
* pedal
* for Arduino nano or mega
* @brief This example demonstrates the use of push buttons that send note
* events.
*
* ### Connections
*
* - 2: momentary push button (to ground)
* - 3: momentary push button (to ground)
*
* The internal pull-up resistors for the buttons will be enabled automatically.
*
* ### Behavior
*
* Pressing the first button will send note on/off events on middle C.
* Pressing the second button will send note on/off events for middle C sharp.
*
* Written by PieterP, 28-01-2019
* https://github.com/tttapa/Control-Surface
*/
// Include the Control Surface library
#include <Control_Surface.h>
// Instantiate a MIDI over USB interface.
//USBDebugMIDI_Interface midi;
//HardwareSerialMIDI_Interface midi;
//HardwareSerialMIDI_Interface midi = Serial;
HardwareSerialMIDI_Interface midiser = Serial;
//HairlessMIDI_Interface midi;
MIDI_PipeFactory<1> pipes;
using namespace MIDI_Notes;
/* Instantiate the momentary push buttons that send out MIDI Note events.
//NoteButton buttons[] = {
//{2, note(C, 4)}, // digital input pin, note number
//{3, note(Db, 4)},
// If you want to set the channel specifically, you can use:
// for UNO , nano
{12, {note(C, 7), CHANNEL_9}},
// {13, {note(Db, 7), CHANNEL_5}},
// {A0, {note(D, 7), CHANNEL_9}},
// {A1, {note(Eb, 7), CHANNEL_5}},
// {A2, {note(E, 7), CHANNEL_5}},
// {A3, {note(F, 7), CHANNEL_5}},
// {A4, {note(Gb, 7), CHANNEL_5}},
// {A5, {note(G, 7), CHANNEL_5}},
//};
*/
//Potenciometrs
CCPotentiometer potentiometer1(A4, {MIDI_CC::Channel_Volume, CHANNEL_11});
CCPotentiometer potentiometer2(A5, {MIDI_CC::Channel_Volume, CHANNEL_12});
CCPotentiometer potentiometer3(A6, {MIDI_CC::Channel_Volume, CHANNEL_13});
//CCPotentiometer potentiometer4(A4, {MIDI_CC::Channel_Volume, CHANNEL_14});
//CCPotentiometer potentiometer5(A5, {MIDI_CC::Channel_Volume, CHANNEL_15});
// The note numbers corresponding to the buttons in the matrix
const AddressMatrix<4, 8> addresses = {{
{36, 37, 38, 39, 40, 41, 42, 43},
{44, 45, 46, 47, 48, 49, 50, 51},
{52, 53, 54, 55, 56, 57, 58, 59},
{60, 61, 62, 63, 64, 65, 66, 67},
}};
NoteButtonMatrix<4, 8> buttonmatrix = {
{A0, A1, A2, A3}, // row pins
{9, 8, 7, 6, 5, 4, 3, 2}, // column pins
addresses, // address matrix
CHANNEL_6, // channel and cable number
};
void setup() {
// Initialize everything
Control_Surface.begin();
midiser >> pipes >> midiser; //all incoming midi from Serial is looped back
midiser.begin();
}
void loop() {
// Update the control surface
Control_Surface.loop();
midiser.update();
}



_ztBMuBhMHo.jpg?auto=compress%2Cformat&w=48&h=48&fit=fill&bg=ffffff)





Comments