#include /* PacMod DJ Controller 002 */ // pin definitions const int digital_pin[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; const int analog_pin[] = { A0, A1 }; // variables for the states of the controls boolean digital_stored_state[19]; int analog_stored_state[2]; // amount of change that constitutes sending a midi message const int analog_threshold = 2; const int analog_scale = 8; // Debounce long debounceDelay = 20; Bounce digital_debouncer[] = { Bounce(digital_pin[0], debounceDelay), Bounce(digital_pin[1], debounceDelay), Bounce(digital_pin[2], debounceDelay), Bounce(digital_pin[3], debounceDelay), Bounce(digital_pin[4], debounceDelay), Bounce(digital_pin[5], debounceDelay), Bounce(digital_pin[6], debounceDelay), Bounce(digital_pin[7], debounceDelay), Bounce(digital_pin[8], debounceDelay), Bounce(digital_pin[9], debounceDelay), Bounce(digital_pin[10], debounceDelay), Bounce(digital_pin[11], debounceDelay), Bounce(digital_pin[12], debounceDelay), Bounce(digital_pin[13], debounceDelay), Bounce(digital_pin[14], debounceDelay), Bounce(digital_pin[15], debounceDelay), Bounce(digital_pin[16], debounceDelay), Bounce(digital_pin[17], debounceDelay), Bounce(digital_pin[18], debounceDelay) }; // MIDI settings int midi_ch = 3; int midi_vel = 127; const int digital_note[] = { 48, 49, 50, 44, 45, 46, 40, 41, 42, 36, 37, 38, 47, 43, 39, 52, 53, 54, 55 }; const int analog_control[] = { 0, 1 }; void setup() { Serial.begin(38400); // set the pin modes && zero saved states int b = 0; // digital pins for (b = 18; b >= 0; b--) { pinMode(digital_pin[b], INPUT_PULLUP); digital_stored_state[b] = false; } // analog pins for (b = 1; b>= 0; b--) { analog_stored_state[b] = 0; } } void loop() { fcnProcessButtons(); } //Function to process the buttons void fcnProcessButtons() { int b = 0; // digital pins for (b = 18; b >= 0; b--) { digital_debouncer[b].update(); boolean state = digital_debouncer[b].read(); if (state != digital_stored_state[b]) { if (state == false) { usbMIDI.sendNoteOn(digital_note[b], midi_vel, midi_ch); } else { usbMIDI.sendNoteOff(digital_note[b], midi_vel, midi_ch); } digital_stored_state[b] = !digital_stored_state[b]; } } // analog pins for (b = 1; b >= 0; b--) { int analog_state = analogRead(analog_pin[b]); if (analog_state - analog_stored_state[b] >= analog_scale || analog_stored_state[b] - analog_state >= analog_scale) { int scaled_value = analog_state / analog_scale; usbMIDI.sendControlChange(analog_control[b], scaled_value, midi_ch); /* Serial.print("analog value "); Serial.print(b); Serial.print(": "); Serial.print(analog_state); Serial.print(" scaled: "); Serial.println(scaled_value);*/ analog_stored_state[b] = analog_state; } } }