diff --git a/Arduinoboy/Arduinoboy.ino b/Arduinoboy/Arduinoboy.ino index d4c31f4..7e5cb7a 100755 --- a/Arduinoboy/Arduinoboy.ino +++ b/Arduinoboy/Arduinoboy.ino @@ -1,17 +1,17 @@ /*************************************************************************** *************************************************************************** - * __ _ __ * - * ____ __________/ /_ __(_)___ ____ / /_ ____ __ __ * - * / __ `/ ___/ __ / / / / / __ \/ __ \/ __ \/ __ \/ / / / * - * / /_/ / / / /_/ / /_/ / / / / / /_/ / /_/ / /_/ / /_/ / * - * \__,_/_/ \__,_/\__,_/_/_/ /_/\____/_.___/\____/\__, / * - * /____/ * + * __ _ __ * + * ____ __________/ /_ __(_)___ ____ / /_ ____ __ __ * + * / __ `/ ___/ __ / / / / / __ \/ __ \/ __ \/ __ \/ / / / * + * / /_/ / / / /_/ / /_/ / / / / / /_/ / /_/ / /_/ / /_/ / * + * \__,_/_/ \__,_/\__,_/_/_/ /_/\____/_.___/\____/\__, / * + * /____/ * * * *************************************************************************** *************************************************************************** * * - * Version: 0.8.7 * - * Date: March 07 2008 * + * Version: 0.9.1 * + * Date: March 08 2008 * * Name: Timothy Lamb * * Email: trash80@gmail.com * * * @@ -56,9 +56,6 @@ * 60 - C-3 to C-8 Notes! * * Prgram Change to select from instrument table * * * - * Special Thanks to firestARTer for help with * - * keyboard & Midi handling information. * - * * ***************************************************************************/ /*************************************************************************** * * @@ -76,7 +73,11 @@ int syncEffectsMidiChannel = 16; //midi sync effects for lsdj slave mode int keyboardInstrumentMidiChannel = 16; //midi channel for keyboard instruments in lsdj -//Mode 0: Midi Input to LSDJ Sync, Mode 1: LSDJ MASTER to Midi output, Mode 2: LSDJ Keyboard +//Mode 0: Midi Input to LSDJ Sync +//Mode 1: LSDJ MASTER to Midi output +//Mode 2: LSDJ Keyboard +//Mode 3: Midi Input to Nanoloop +//Mode 4: Pushpin Interface int mode = 0; //Enforces the mode above, without reading from memory, use this to force the mode if you dont have a push button setup. @@ -113,6 +114,9 @@ boolean midiNoteOffMode =false; boolean midiProgramChange=false; boolean statusLedIsOn =false; boolean statusLedBlink =false; + +boolean nanoState =false; +boolean nanoSkipSync =false; /*************************************************************************** * Counter vars ***************************************************************************/ @@ -178,6 +182,10 @@ int keyboardLastTbl = 0; int keyboardDiff = 0; int keyboardCount = 0; +byte keyboardStartOctave = 0x24; +byte keyboardNoteStart = 0; +byte keyboardNoteOffset = 0; +byte keyboardCommands[12]; void setup() { /* @@ -209,7 +217,19 @@ void setup() { */ syncEffectsMidiChannel = 143 + syncEffectsMidiChannel; //set the midi channel to the real number (144 to 159) keyboardInstrumentMidiChannel = 143 + keyboardInstrumentMidiChannel; //set the midi channel to the real number (144 to 159) - + keyboardNoteStart = keyboardStartOctave + 12; + keyboardCommands[0] = keyboardMut1; + keyboardCommands[1] = keyboardMut2; + keyboardCommands[2] = keyboardMut3; + keyboardCommands[3] = keyboardMut4; + keyboardCommands[4] = keyboardCurL; + keyboardCommands[5] = keyboardCurR; + keyboardCommands[6] = keyboardCurU; + keyboardCommands[7] = keyboardCurD; + keyboardCommands[8] = keyboardEntr; + keyboardCommands[9] = keyboardTblDn; + keyboardCommands[10] = keyboardTblUp; + keyboardCommands[11] = keyboardTblCue; /* Load Settings from EEPROM */ diff --git a/Arduinoboy/Mode_LSDJ_Keyboard.ino b/Arduinoboy/Mode_LSDJ_Keyboard.ino index 7ddd75a..6b1e87c 100755 --- a/Arduinoboy/Mode_LSDJ_Keyboard.ino +++ b/Arduinoboy/Mode_LSDJ_Keyboard.ino @@ -21,7 +21,6 @@ void modeLSDJKeyboardSetup() keyboardCurrentOct = 0; keyboardCurrentIns = 0; keyboardCurrentTbl = 0; - modeLSDJKeyboard(); } @@ -100,9 +99,13 @@ void playLSDJProgramChange() void playLSDJKeyboardNote() { - if(incomingMidiData[1] >= 0x3C) { - incomingMidiData[1] = incomingMidiData[1] - 0x3C; - if(incomingMidiData[1] >= 0x30) { + if(incomingMidiData[1] >= keyboardNoteStart) { + keyboardNoteOffset = 0; + incomingMidiData[1] = incomingMidiData[1] - keyboardNoteStart; + if(incomingMidiData[1] >= 0x3C) { + keyboardNoteOffset = 0x0C; + keyboardCurrentOct = 4; + } else if(incomingMidiData[1] >= 0x30) { keyboardCurrentOct = 4; } else if (incomingMidiData[1] >= 0x24) { keyboardCurrentOct = 3; @@ -114,70 +117,30 @@ void playLSDJKeyboardNote() keyboardCurrentOct = 0; } - if(keyboardCurrentOct != keyboardLastOct) - { - if(keyboardCurrentOct > keyboardLastOct) { - keyboardDiff = keyboardCurrentOct - keyboardLastOct; - for(keyboardCount=0;keyboardCount keyboardLastOct) { + keyboardDiff = keyboardCurrentOct - keyboardLastOct; + for(keyboardCount=0;keyboardCount=keyboardStartOctave) { + addGameboyByte(keyboardCommands[incomingMidiData[1] - keyboardStartOctave]); } } diff --git a/Arduinoboy/Mode_Nanoloop.ino b/Arduinoboy/Mode_Nanoloop.ino index 2910c9d..3bcf443 100755 --- a/Arduinoboy/Mode_Nanoloop.ino +++ b/Arduinoboy/Mode_Nanoloop.ino @@ -10,11 +10,70 @@ * (at your option) any later version. * * * ***************************************************************************/ - -// Placeholder, not implemented yet. :/ + void modeNanoloopSetup() +{ + pinMode(pinGBClock,OUTPUT); + digitalWrite(pinGBClock,LOW); + modeNanoloopSync(); +} + +void modeNanoloopSync() { while(1){ - setMode(); + if (Serial.available() > 0) { + incomingMidiByte = Serial.read(); + Serial.print(incomingMidiByte, BYTE); + if(incomingMidiByte > 0x7F) { + switch (incomingMidiByte) { + case 0xF8: // Clock Message Recieved + //send a clock tick out if the sequencer is runn + if(sequencerStarted) { + nanoSkipSync = !nanoSkipSync; + if(countSyncTime) { + nanoState = sendTickToNanoloop(nanoState, false); + } else { + nanoState = sendTickToNanoloop(true, true); + } + nanoState = sendTickToNanoloop(nanoState, nanoSkipSync); + + if(!countSyncPulse) statusLedOn(); + countSyncPulse++; + countSyncPulse = countSyncPulse % 24; + break; + } + break; + case 0xFA: // Transport Start Message + case 0xFB: // Transport Continue Message + sequencerStart(); + break; + case 0xFC: // Transport Stop Message + sequencerStop(); + break; + default: + break; + } + } + setMode(); + updateStatusLed(); + } else { + setMode(); + updateStatusLed(); + } + } +} + +boolean sendTickToNanoloop(boolean state, boolean last_state) +{ + if(!state) { + if(last_state) { + digitalWrite(pinGBSerialOut,HIGH); + } else { + digitalWrite(pinGBSerialOut,LOW); + } + return true; + } else { + digitalWrite(pinGBSerialOut,HIGH); + return false; } } diff --git a/Arduinoboy/Mode_PushPin.ino b/Arduinoboy/Mode_PushPin.ino index 8220b01..19c7d1c 100755 --- a/Arduinoboy/Mode_PushPin.ino +++ b/Arduinoboy/Mode_PushPin.ino @@ -14,6 +14,7 @@ // Placeholder, not implemented yet. :/ void modePushpinSetup() { + pinMode(pinGBClock,OUTPUT); while(1){ setMode(); }