#include "MIDI.h" /* File name: 'DrumTrigger.ino' versjon 0.01 * * Original code by Travis Thatcher, made for his CR-5000 * https://github.com/TravisThatcher/MIDI_TO_TRIGGER_SYNC * Rewritten to work with 12 input Simmons SDS 7 by * Hans R Lønningdal http://snw.lonningdal.no * * Dependencies: MIDI Library for the Arduino 4.2 by Francois Best * http://arduinomidilib.fortyseveneffects.com/index.html * http://projectgus.github.io/hairless-midiserial/ * * MIT License https://opensource.org/licenses/MIT */ boolean DEBUG = false; // to turn off all debug print messages MIDI_CREATE_DEFAULT_INSTANCE(); // Thank you Francois! #define NUMTRIGS 12 // number of trigger outputs #define START_STOP A0 // status #define OCTAVE 60 // MIDI note #60 = C5 // Enable to set variable trigger time, use 5k or 10k pot //#define TRIGGER_TIME_POT A1 // variable trigger time // Enable to set variable MIDI channel, use pot or switch with resistors //#define MIDI_CHANNEL_POT A2 // variable midi channel int midiChannel = 1; // receiving MIDI channel, use MIDI_CHANNEL_OMNI for all, or config with potentiometer int triggerTime = 3; // Simmons says 2 milliseconds for SDS 7 Sequencer Trigger Input int currentTime=0; // Set these to whatever works for your circuit connections int triggerPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Hold times for triggers int triggerTimes[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Initialize all triggers to off int triggerStates[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW}; void setup() { // Enable these to be able to select MIDI channel at boot //pinMode(MIDI_CHANNEL_POT, INPUT); //delay(2); // stabilize input //midiChannel = map( analogRead(MIDI_CHANNEL_POT), 0, 1024, 1, 17 ); // return 1-16 MIDI.turnThruOff(); if(!DEBUG){ MIDI.begin(midiChannel); // Activate midi }else{ Serial.begin(19200); // Othewise debug mode = no midi, allows for printing debug info to serial monitor } if(DEBUG){ Serial.println("hello!"); } // setup output pins pinMode(START_STOP, OUTPUT); digitalWrite(START_STOP, LOW); // Enable to use variable trigger time //pinMode(TRIGGER_TIME_POT, INPUT) // variable trigger time pinMode(2, OUTPUT); digitalWrite(2, LOW); pinMode(3, OUTPUT); digitalWrite(3, LOW); pinMode(4, OUTPUT); digitalWrite(4, LOW); pinMode(5, OUTPUT); digitalWrite(5, LOW); pinMode(6, OUTPUT); digitalWrite(6, LOW); pinMode(7, OUTPUT); digitalWrite(7, LOW); pinMode(8, OUTPUT); digitalWrite(8, LOW); pinMode(9, OUTPUT); digitalWrite(9, LOW); pinMode(10, OUTPUT); digitalWrite(10, LOW); pinMode(11, OUTPUT); digitalWrite(11, LOW); pinMode(12, OUTPUT); digitalWrite(12, LOW); pinMode(13, OUTPUT); digitalWrite(13, LOW); MIDI.setHandleStart(HandleStart); MIDI.setHandleStop(HandleStop); MIDI.setHandleContinue(HandleContinue); MIDI.setHandleNoteOn(HandleNoteOn); } void loop() { MIDI.read(); currentTime = millis(); // check out the trigger states for(int i=0; i triggerTime){ if(DEBUG){ Serial.println("turning off!"); } digitalWrite(triggerPins[i], LOW); triggerStates[i]=LOW; } } } } void HandleStart() { digitalWrite(START_STOP, HIGH); } void HandleContinue() { digitalWrite(START_STOP, HIGH); } void HandleStop() { digitalWrite(START_STOP, LOW); } void HandleNoteOn(byte channel, byte pitch, byte velocity){ if(DEBUG){ Serial.println(pitch); } // triggers! for(int i=0; i