#include #define kNoteOff 0x80 #define kNoteOn 0x90 #define kPolyPres 0xA0 #define kCtrlChng 0xB0 #define kPgmChng 0xC0 #define kChanPres 0xD0 #define kPitchBend 0xE0 #define kBeginSysex 0xF0 #define kQuarterFrame 0xF1 #define kSongPos 0xF2 #define kSongSel 0xF3 #define kUndef1 0xF4 #define kUndef2 0xF5 #define kTuneReq 0xF6 #define kEndSysex 0xF7 #define kRTClock 0xF8 #define kRTUndef3 0xF9 #define kRTSeqStart 0xFA #define kRTSeqCont 0xFB #define kRTSeqStop 0xFC #define kRTUndef4 0xFD #define kRTActiveSens 0xFE #define kRTSysReset 0xFF #define kCmdMask 0xF0 #define kChanMask 0x0F int valOne = 0; int valTwo = 0; int valThree = 0; int valFour = 0; void setup() { Serial.begin(31250); } /*#define mSetLed(pin, val) \ { \ switch(pin) \ { \ case 0:digitalWrite(9, val); \ case 1:digitalWrite(10, val); \ case 2:digitalWrite(11, val); \ case 3:digitalWrite(12, val); \ } \ }*/ void blinkLed(int pin) { digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); delay(10); } int GetEnable(int pin) { switch(pin) { case 0:return digitalRead(5); case 1:return digitalRead(6); case 2:return digitalRead(7); case 3:return digitalRead(8); } } void midCtl(char ctlNo, char val) { Serial.print(kCtrlChng, BYTE); Serial.print(ctlNo, BYTE); Serial.print(val, BYTE); } void loop() { int i; int newVal; int oldVal[5]; pinMode(12, OUTPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); //pinMode(5, INPUT); // blink led for (i = 1; i <= 3; i++) { digitalWrite(12, 1); delay(200); digitalWrite(12, 0); delay(200); } // main loop while(1) { delay(20); while (Serial.available()){ //Built-in knob, ctl 9 } newVal = (analogRead(3)/8); if (oldVal[0] != newVal){ oldVal[0] = newVal; midCtl(9, newVal); blinkLed(12); } for (i = 2; i <= 4; i++) { if (digitalRead(i) == 1 && i == 2) { delay(20); // needed after channel change while (Serial.available()) { //if the serial port is transmitting, do nothing until finished // wait } newVal = (analogRead(i-2)/4); if (oldVal[i-2] != newVal) { // save the new value oldVal[i] = newVal; // output midi message midCtl(8+i, newVal); blinkLed(12); } } else if (digitalRead(i)==1 && i != 2){ delay(20); while (Serial.available()) { //if the serial port is transmitting, do nothing until finished // wait } newVal = (analogRead(i-2)/8); if (oldVal[i-2] != newVal) { // save the new value oldVal[i] = newVal; // output midi message midCtl(8+i, ((newVal-32)*2)%128); blinkLed(12); } } } } }