Components and supplies
1
Arduino Nano
Tools and machines
1
Solder Iron
Apps and platforms
1
Arduino IDE 2.0 (beta)
Project description
Code
MIDI clock
cpp
1// MIDI 2 TRIGGER - 6 ports plus clock 2 3//#include <Serial.h> 4 5byte mid[3]; // MIDI data 6unsigned long pulse[7]; // CPU clock counter in ms 7const unsigned long trig = 2; // trigger pulse time in ms 8byte c = 4; 9 10void setup() 11{ 12 pinMode(4,OUTPUT); // C 13 pinMode(3,OUTPUT); // D 14 pinMode(2,OUTPUT); // E 15 pinMode(7,OUTPUT); // F 16 pinMode(5,OUTPUT); // G 17 pinMode(6,OUTPUT); // A 18 pinMode(10,OUTPUT); // 1/8 19 pinMode(9,OUTPUT); // 1/8 20 pinMode(8,OUTPUT); // 1/16 21 pinMode(11,OUTPUT); // 1/16 22 pinMode(12,OUTPUT); // 1/32 23 pinMode(13,OUTPUT); // 1/32 24 pinMode(A0,OUTPUT); // SS 25 26 Serial.begin(31250); 27} 28 29void loop() 30{ 31if (Serial.available() == 0) goto pulse; 32 33midicomm: 34if (Serial.available() == 1) 35 { 36 mid[0] = Serial.read(); 37 if (bitRead(mid[0],7) == HIGH && bitRead(mid[0],6) == LOW && bitRead(mid[0],5) == LOW) goto midinote; 38 } 39 else 40 { 41 goto midicomm; 42 } 43 44midinote: 45if (Serial.available() == 1) 46 { 47 mid[1] = Serial.read(); 48 if (bitRead(mid[1],7) == HIGH && bitRead(mid[1],6) == LOW && bitRead(mid[1],5) == LOW) 49 { 50 mid[0] = mid[1]; 51 goto midinote; 52 } 53 } 54 else 55 { 56 goto midinote; 57 } 58 59midivol: 60if (Serial.available() == 1) 61 { 62 mid[2] = Serial.read(); 63 if (bitRead(mid[2],7) == HIGH && bitRead(mid[2],6) == LOW && bitRead(mid[2],5) == LOW) 64 { 65 mid[0] = mid[2]; 66 goto midinote; 67 } 68 } 69 else 70 { 71 goto midivol; 72 } 73 74// note on 75 if (bitRead(mid[0],4) == HIGH && mid[2] > 0) 76 { 77 if (mid[1] == 60) // C4 78 { 79 digitalWrite(4,HIGH); 80 pulse[1] = millis(); 81 } 82 if (mid[1] == 62) // D4 83 { 84 digitalWrite(3,HIGH); 85 pulse[2] = millis(); 86 } 87 if (mid[1] == 64) // E4 88 { 89 digitalWrite(2,HIGH); 90 pulse[3] = millis(); 91 } 92 if (mid[1] == 65) // F4 93 { 94 digitalWrite(7,HIGH); 95 pulse[4] = millis(); 96 } 97 if (mid[1] == 67) // G4 98 { 99 digitalWrite(5,HIGH); 100 pulse[5] = millis(); 101 } 102 if (mid[1] == 69) // A4 103 { 104 digitalWrite(6,HIGH); 105 pulse[6] = millis(); 106 } 107 if (mid[1] == 72) // C5 108 { 109 c--; 110 digitalWrite(A0,HIGH); // SS 111 digitalWrite(12,HIGH); // 1/32 112 digitalWrite(13,HIGH); 113 digitalWrite(8,bitRead(c,0)); // 1/16 114 digitalWrite(11,bitRead(c,0)); 115 if (c == 3) 116 { 117 digitalWrite(9,HIGH); // 1/8 118 digitalWrite(10,HIGH); 119 } 120 if (c == 0) c = 4; 121 pulse[0] = millis(); 122 } 123 } 124 125// pulse length 126pulse: 127if (pulse[1] + trig < millis()) digitalWrite(4,LOW); 128if (pulse[2] + trig < millis()) digitalWrite(3,LOW); 129if (pulse[3] + trig < millis()) digitalWrite(2,LOW); 130if (pulse[4] + trig < millis()) digitalWrite(7,LOW); 131if (pulse[5] + trig < millis()) digitalWrite(5,LOW); 132if (pulse[6] + trig < millis()) digitalWrite(6,LOW); 133if (pulse[0] + trig < millis()) 134 { 135 digitalWrite(8,LOW); 136 digitalWrite(9,LOW); 137 digitalWrite(10,LOW); 138 digitalWrite(11,LOW); 139 digitalWrite(12,LOW); 140 digitalWrite(13,LOW); 141 } 142if (pulse[0] + 2000 < millis()) 143 { 144 digitalWrite(A0,LOW); 145 c = 4; 146 } 147}
MIDI to trigger
cpp
1// MIDI 2 TRIGGER - 8x12 ports 2 3//#include <Serial.h> 4 5byte mid[3]; // MIDI data 6byte x; // buffer 7byte key; // key byte 8/* note number oct-odd oct-even 9note nibble WSL-L WSL-R 10C 1 0001 d 5 11C# 2 0010 e 6 12D 3 0011 c 4 13D# 4 0100 b 3 14E 5 0101 a 1 15F 6 0110 9 2 16F# 9 1001 4 c 17G a 1010 6 e 18G# b 1011 5 d 19A c 1100 1 a 20A# d 1101 3 b 21B e 1110 2 9 22*/ 23byte trig[97]={0, // Demultiplexer 24B00001100,B00001110,B00001101,B00001001,B00001011,B00001010,B00000110,B00000101,B00000100,B00000011,B00000001,B00000010, 25B00010101,B00010110,B00010100,B00010011,B00010001,B00010010,B00011110,B00011100,B00011101,B00011001,B00011011,B00011010, 26B00101100,B00101110,B00101101,B00101001,B00101011,B00101010,B00100110,B00100101,B00100100,B00100011,B00100001,B00100010, 27B00110101,B00110110,B00110100,B00110011,B00110001,B00110010,B00111110,B00111100,B00111101,B00111001,B00111011,B00111010, 28B01001100,B01001110,B01001101,B01001001,B01001011,B01001010,B01000110,B01000101,B01000100,B01000011,B01000001,B01000010, 29B01010101,B01010110,B01010100,B01010011,B01010001,B01010010,B01011110,B01011100,B01011101,B01011001,B01011011,B01011010, 30B01101100,B01101110,B01101101,B01101001,B01101011,B01101010,B01100110,B01100101,B01100100,B01100011,B01100001,B01100010, 31B01110101,B01110110,B01110100,B01110011,B01110001,B01110010,B01111110,B01111100,B01111101,B01111001,B01111011,B01111010 32}; 33 34void setup() 35{ 36 pinMode(4,OUTPUT); // oct 1 37 pinMode(5,OUTPUT); // oct 2 38 pinMode(6,OUTPUT); // oct 4 39 pinMode(8,OUTPUT); // note 1 40 pinMode(9,OUTPUT); // note 2 41 pinMode(10,OUTPUT); // note 4 42 pinMode(11,OUTPUT); // note 8 43 pinMode(12,OUTPUT); // 74138 EN 44 pinMode(13,OUTPUT); // test LED 45 46 Serial.begin(31250); 47} 48 49void loop() 50{ 51midicomm: 52if (Serial.available() == 1) 53 { 54 mid[0] = Serial.read(); 55 if (bitRead(mid[0],7) == HIGH && bitRead(mid[0],6) == LOW && bitRead(mid[0],5) == LOW) goto midinote; 56 } 57 else 58 { 59 goto midicomm; 60 } 61 62midinote: 63if (Serial.available() == 1) 64 { 65 mid[1] = Serial.read(); 66 if (bitRead(mid[1],7) == HIGH && bitRead(mid[1],6) == LOW && bitRead(mid[1],5) == LOW) 67 { 68 mid[0] = mid[1]; 69 goto midinote; 70 } 71 } 72 else 73 { 74 goto midinote; 75 } 76 77midivol: 78if (Serial.available() == 1) 79 { 80 mid[2] = Serial.read(); 81 if (bitRead(mid[2],7) == HIGH && bitRead(mid[2],6) == LOW && bitRead(mid[2],5) == LOW) 82 { 83 mid[0] = mid[2]; 84 goto midinote; 85 } 86 } 87 else 88 { 89 goto midivol; 90 } 91 92// trigger pulse, code time = 200 us 93if (bitRead(mid[0],4) == HIGH && mid[2] > 0) // note ON 94{ 95digitalWrite(13,HIGH); 96x = trig[mid[1] - 11]; // key byte select (C0=12, 32') 97digitalWrite(6,bitRead(x,6)); 98digitalWrite(5,bitRead(x,5)); 99digitalWrite(4,bitRead(x,4)); 100digitalWrite(11,bitRead(x,3)); 101digitalWrite(10,bitRead(x,2)); 102digitalWrite(9,bitRead(x,1)); 103digitalWrite(8,bitRead(x,0)); 104delayMicroseconds(10); 105digitalWrite(12,HIGH); 106delayMicroseconds(100); 107digitalWrite(12,LOW); 108delayMicroseconds(10); 109digitalWrite(4,LOW); 110digitalWrite(5,LOW); 111digitalWrite(6,LOW); 112digitalWrite(8,LOW); 113digitalWrite(9,LOW); 114digitalWrite(10,LOW); 115digitalWrite(11,LOW); 116digitalWrite(13,LOW); 117} 118}
Downloadable files
back of the module
midi2trigger-back.jpg

side
midi2trigger-side.jpg

midi jacks
midi2trigger-midi.jpg

Documentation
schematic
midi2trig.pdf
Comments
Only logged in users can leave comments