From 2ec6adb5e2ee134be9c6d30bcdfc73285472d2e4 Mon Sep 17 00:00:00 2001 From: timothy lamb Date: Sun, 26 Jul 2015 15:26:59 -0700 Subject: [PATCH] Release 0.9.8 from Google Code. --- Arduinoboy/Arduinoboy.ino | 36 ++-- Arduinoboy/Mode.ino | 114 ++++++++--- Arduinoboy/Mode_LSDJ_Keyboard.ino | 263 +++++++++++++++---------- Arduinoboy/Mode_LSDJ_MasterSync.ino | 93 ++++++--- Arduinoboy/Mode_LSDJ_SlaveSync.ino | 135 +++++++------ Arduinoboy/Mode_Nanoloop.ino | 38 ++-- Arduinoboy/Mode_PushPin.ino | 21 -- Arduinoboy/Temp.ino | 0 Schematic/arduinoboy-schem-v.0.9.8.png | Bin 0 -> 79538 bytes 9 files changed, 430 insertions(+), 270 deletions(-) delete mode 100755 Arduinoboy/Mode_PushPin.ino delete mode 100755 Arduinoboy/Temp.ino create mode 100644 Schematic/arduinoboy-schem-v.0.9.8.png diff --git a/Arduinoboy/Arduinoboy.ino b/Arduinoboy/Arduinoboy.ino index 7e5cb7a..ab3d755 100755 --- a/Arduinoboy/Arduinoboy.ino +++ b/Arduinoboy/Arduinoboy.ino @@ -10,8 +10,8 @@ *************************************************************************** *************************************************************************** * * - * Version: 0.9.1 * - * Date: March 08 2008 * + * Version: 0.9.8 * + * Date: March 11 2008 * * Name: Timothy Lamb * * Email: trash80@gmail.com * * * @@ -66,19 +66,21 @@ * * ***************************************************************************/ #include - /*************************************************************************** * Simple User Settings ***************************************************************************/ int syncEffectsMidiChannel = 16; //midi sync effects for lsdj slave mode -int keyboardInstrumentMidiChannel = 16; //midi channel for keyboard instruments in lsdj +int masterNotePositionMidiChannel = 16; //LSDJ in master mode will send its song position on the start button via midi note. +int keyboardInstrumentMidiChannel = 16; //midi channel for keyboard instruments in lsdj. + +boolean keyboardCompatabilityMode = true; //Set to true if you are using LSDJ version lower then 2.6, not working right now //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; +int mode = 0; +int numberOfModes = 4; //Right now there are 4 modes, Might be more in the future //Enforces the mode above, without reading from memory, use this to force the mode if you dont have a push button setup. boolean forceMode = false; @@ -135,14 +137,17 @@ unsigned int waitClock =0; byte incomingMidiByte; //incomming midi message byte readgbClockLine; byte readGbSerialIn; +byte bit; int incomingMidiData[] = {0, 0, 0}; int incomingMidiNote = 0; int incomingMidiVel = 0; byte readToggleMode; byte serialWriteBuffer[256]; +byte midiDefaultStartOffset; int writePosition=0; int readPosition=0; +int lastMode=0; //Stores the last selected mode for leds. /*************************************************************************** * LSDJ Keyboard mode settings ***************************************************************************/ @@ -203,7 +208,7 @@ void setup() { /* Set MIDI Serial Rate */ - Serial.begin(31250); + Serial.begin(31250); //31250 /* Set Pin States @@ -211,13 +216,16 @@ void setup() { digitalWrite(pinMidiInputPower,HIGH); // turn on the optoisolator digitalWrite(pinGBClock,HIGH); // gameboy wants a HIGH line digitalWrite(pinGBSerialOut,LOW); // no data to send - digitalWrite(pinStatusLed,HIGH); /* Misc Startup */ - 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; + syncEffectsMidiChannel = 143 + syncEffectsMidiChannel; //set the midi channel to the real note-on number (144 to 159) + keyboardInstrumentMidiChannel = 143 + keyboardInstrumentMidiChannel; //set the midi channel to the real note-on number (144 to 159) + masterNotePositionMidiChannel = 143 + masterNotePositionMidiChannel; //set the midi channel to the real note-on number (144 to 159) + keyboardNoteStart = keyboardStartOctave + 12; // Set the octave where the actual notes start (the octave below is for the mutes, cursor, etc) +/* + Assign the keyboard mode command array for the first octave +*/ keyboardCommands[0] = keyboardMut1; keyboardCommands[1] = keyboardMut2; keyboardCommands[2] = keyboardMut3; @@ -234,9 +242,13 @@ void setup() { Load Settings from EEPROM */ if(!forceMode) mode = EEPROM.read(eepromMemoryByte); - showSelectedMode(); + lastMode = mode; + showSelectedMode(); //Light up the LED that shows which mode we are in. } +/* + Main Loop, which we don't use to be able to isolate each mode into its own setup and loop functions +*/ void loop () { setMode(); switchMode(); diff --git a/Arduinoboy/Mode.ino b/Arduinoboy/Mode.ino index a627347..275370a 100755 --- a/Arduinoboy/Mode.ino +++ b/Arduinoboy/Mode.ino @@ -11,24 +11,46 @@ * * ***************************************************************************/ +/* ***************************************************************************/ +/* "Mode" Functions. Deals with changing the setup of arduino. */ +/* ***************************************************************************/ + + /* + setMode will check if the push button is depressed, If it is it will + increment the mode number and make sure its in the + range 0 to 4 by mod (%). It will then write the mode to memory, + set the leds to display the mode, and switch the code over to the + right function. + */ void setMode() { - if(digitalRead(pinButtonMode)) { - mode++; - if(mode >= 5) mode = 0; - if(!forceMode) EEPROM.write(eepromMemoryByte, mode); - showSelectedMode(); - switchMode(); + if(digitalRead(pinButtonMode)) { //if the button is pressed + mode++; //increment the mode number + if(mode > (numberOfModes - 1)) mode=0; //if the mode is greater then 4 it will wrap back to 0 + if(!forceMode) EEPROM.write(eepromMemoryByte, mode); //write mode to eeprom if we arnt forcing a mode in the config + showSelectedMode(); //set the LEDS + switchMode(); //switch to the new mode } } + /* + showSelectedMode1 turns off the last mode led, turns on the new mode led + and delays for a period of time to reduce jitter behavior from the mode + changing too fast. + */ void showSelectedMode() { - for(int led=0;led<=5;led++) digitalWrite(pinLeds[led],LOW); + digitalWrite(pinLeds[lastMode],LOW); digitalWrite(pinLeds[mode],HIGH); + lastMode = mode; delay(300); } + /* + switchMode is only called from setMode. its responsible for + linking the mode number to its corrisponding function, + and then calling that function. function. function. + */ void switchMode() { switch(mode) @@ -45,50 +67,78 @@ void switchMode() case 3: modeNanoloopSetup(); break; - case 4: - modePushpinSetup(); - break; } } + +/* ***************************************************************************/ +/* General Global Functions Used in more then one of the modes */ +/* ***************************************************************************/ + + /* + sequencerStart is called when either LSDJ has started to play in master mode, + or when a MIDI Start or continue command is received in lsdj slave mode. + Basically it just resets some counters we use and sets a "start" flag. + */ + void sequencerStart() { - sequencerStarted = true; - countSyncPulse = 0; - countSyncTime = 0; + digitalWrite(pinStatusLed,HIGH); + sequencerStarted = true; //Sequencer has started? + countSyncPulse = 0; //Used for status LED, counts 24 ticks (quarter notes) + countSyncTime = 0; //Used to count a custom amount of clock ticks (2/4/8) for sync effects } + /* + sequencerStop is called when either LSDJ has stopped sending sync commands for + some time in LSDJ Master mode, or when a MIDI Stop command is received in + lsdj slave mode. + Basically it just resets some counters we use and sets the "start" flag to false. + */ void sequencerStop() { - midiSyncEffectsTime = false; - sequencerStarted = false; - countSyncPulse = 0; - countSyncTime = 0; + digitalWrite(pinStatusLed,LOW); + midiSyncEffectsTime = false;//Turn off MIDI sync effects in LSDJ slave mode + sequencerStarted = false; //Sequencer has started? + countSyncPulse = 0; //Used for status LED, counts 24 ticks (quarter notes) + countSyncTime = 0; //Used to count a custom amount of clock ticks (2/4/8) for sync effects } + /* + updateStatusLed should be placed inside of the main loop cycle of a mode function. It counts to a + certain number to delay the action of turning off the status led, so the blink is visible to the human eye. ;)> + I guess this could be called the blinking routine. + */ void updateStatusLed() { - if(statusLedIsOn) { - countStatusLedOn++; - if(countStatusLedOn > 3000) { - countStatusLedOn = 0; - digitalWrite(pinStatusLed,LOW); - statusLedIsOn = false; - } else if (statusLedBlink && countStatusLedOn == 1) { - digitalWrite(pinStatusLed,LOW); - } else if (statusLedBlink && countStatusLedOn > 1000) { - statusLedBlink = false; - digitalWrite(pinStatusLed,HIGH); + if(statusLedIsOn) { //is the led on? + countStatusLedOn++; //then increment the counter by 1 + if(countStatusLedOn > 3000) { //if the counter is pretty high + countStatusLedOn = 0; //then reset it to zero. + digitalWrite(pinStatusLed,LOW); //and turn off the status led + statusLedIsOn = false; //and set our "is it on?" to false, cause its off now. ;p + + } else if (statusLedBlink && countStatusLedOn == 1) { //someone told me to blink, because i was already on + digitalWrite(pinStatusLed,LOW); //so I'll turn off and turn back on later.. + + } else if (statusLedBlink && countStatusLedOn > 1000) {//Now that I've waited long enough I'll finish my blink. + statusLedBlink = false; //Turn off the issued blink + digitalWrite(pinStatusLed,HIGH); //... and finally turn back on. } } } + /* + statusLedOn is the function to call when we want the status led to blink for us. + all it does is check if its been already asked to turn on, if it has it will set a flag + to make it blink. Either way it will reset the blink timer and turn on the LED + */ void statusLedOn() { if(statusLedIsOn) { - statusLedBlink = true; + statusLedBlink = true; //Make it blink even though its already on } - statusLedIsOn = true; - countStatusLedOn = 0; - digitalWrite(pinStatusLed,HIGH); + statusLedIsOn = true; //This is the flag the updator function looks for to know if its ok to increment the timer and wait to turn off the led + countStatusLedOn = 0; //Reset the timer + digitalWrite(pinStatusLed,HIGH); //Turn on the led } diff --git a/Arduinoboy/Mode_LSDJ_Keyboard.ino b/Arduinoboy/Mode_LSDJ_Keyboard.ino index 6b1e87c..a0c5ea3 100755 --- a/Arduinoboy/Mode_LSDJ_Keyboard.ino +++ b/Arduinoboy/Mode_LSDJ_Keyboard.ino @@ -13,117 +13,176 @@ void modeLSDJKeyboardSetup() { - pinMode(pinGBClock,OUTPUT); - addGameboyByte(0); - for(int rst=0;rst<5;rst++) addGameboyByte(keyboardOctDn); - for(int rst=0;rst<41;rst++) addGameboyByte(keyboardInsDn); - for(int rst=0;rst<41;rst++) addGameboyByte(keyboardTblDn); - keyboardCurrentOct = 0; - keyboardCurrentIns = 0; - keyboardCurrentTbl = 0; - modeLSDJKeyboard(); + digitalWrite(pinStatusLed,LOW); + pinMode(pinGBClock,OUTPUT); //make sure our gameboy Clock is set for OUTPUT mode + digitalWrite(pinGBClock,LOW); //Generally this should be HIGH ie: 1, on, whatever. but since we are emulating a pc keyboard it should be LOW/0/off + addGameboyByte(0); //Send 8bits of nothing. don't ask I dont know. + + /* The stuff below makes sure the code is in the same state as LSDJ on reset / restart, mode switched, etc. */ + + for(int rst=0;rst<5;rst++) addGameboyByte(keyboardOctDn); //Return lsdj to the first octave + for(int rst=0;rst<41;rst++) addGameboyByte(keyboardInsDn); //Return lsdj to the first instrument + + keyboardCurrentOct = 0; //Set our current octave to 0. + keyboardLastOct = 0; //Set our last octave to 0. + keyboardCurrentIns = 0; //Set out current instrument to 0. + keyboardLastIns = 0; //Set out last used instrument to 0. + + + modeLSDJKeyboard(); //.... And start the fun } + void modeLSDJKeyboard() { - while(1){ - - if (Serial.available() > 0) { - incomingMidiByte = Serial.read(); - Serial.print(incomingMidiByte, BYTE); - if(incomingMidiByte > 0x7F) { + while(1){ //Loop foreverrrr + if (Serial.available() > 0) { //If MIDI is sending + incomingMidiByte = Serial.read(); //Get the byte sent from MIDI + Serial.print(incomingMidiByte, BYTE);//Echo the Byte to MIDI Output + + + /*************************************************************************** + * Midi to LSDJ Keyboard Handling * + ***************************************************************************/ + //If the byte is a Status Message + if(incomingMidiByte > 0x7F) { + /* Status message Information (# = midi channel 0 to F [1-16] ) + 0x8# = Note Off + 0x9# = Note On + 0xA# = AfterTouch (ie, key pressure) + 0xB# = Control Change + 0xC# = Program (patch) change + 0xD# = Channel Pressure + 0xE# = Pitch Wheel + 0xF0 - 0xF7 = System Common Messages + 0xF8 - 0xFF = System Realtime Messages + */ + + //Weee hello world bitwise and. ... make the second hex digit zero so we can have a simple case statement + // - the second digit is usually the midi channel 0 to F (1-16) unless its a 0xF0 message... switch (incomingMidiByte & 0xF0) { case 0x90: - midiNoteOnMode = true; - incomingMidiData[0] = incomingMidiByte; - incomingMidiData[1] = false; + //Note-On Status Message (Note: we have to treat this carefully because note status isnt sent on every note-on, damn it) + //There are 3 bytes total we need: Channel, Note, and velocity, these wil be assigned to a array until we have the velocity, + //at that point we can then call our note out function to LSDJ + midiNoteOnMode = true; //Set our stupid "Note on mode" on + incomingMidiData[0] = incomingMidiByte; //Assign the byte to the first position of a data array. (this is the midi channel) + incomingMidiData[1] = false; //Force the second position to false (this will hold the note number) break; case 0xC0: - midiProgramChange = true; - midiNoteOnMode = false; - incomingMidiData[0] = incomingMidiByte - 48; + //Program change message + midiProgramChange = true; //Set our silly "Program Change mode" ... we need to get the next byte later + midiNoteOnMode = false; //Turn Note-on mode off + incomingMidiData[0] = incomingMidiByte - 48;//Set the number to a "note on" message so we can use the same "channel" variable as note on messages + break; + case 0xF0: + //Do nothing, these dont interfear with our note-on mode break; default: + //Turn Note-On mode off + midiNoteOnMode = false; break; } } else if(midiNoteOnMode) { + //It wasnt a status bit, so lets assume it was a note message if the last status message was note-on. if(!incomingMidiData[1]) { + //If we dont have a note number, we assume this byte is the note number, get it... incomingMidiData[1] = incomingMidiByte; } else { - incomingMidiData[2] = incomingMidiByte; - playLSDJKeyboard(); - incomingMidiData[1] = false; + //We have our note and channel, so call our note function... + playLSDJNote(incomingMidiData[0], incomingMidiData[1], incomingMidiByte); + incomingMidiData[1] = false; //Set the note to false, forcing to capture the next note } } else if (midiProgramChange) { - incomingMidiData[1] = incomingMidiByte; - playLSDJProgramChange(); + changeLSDJInstrument(incomingMidiData[0], incomingMidiByte); midiProgramChange = false; incomingMidiData[0] = false; - incomingMidiData[1] = false; } - updateGameboyByteFrame(); - updateStatusLed(); - setMode(); - } else { - updateGameboyByteFrame(); - updateStatusLed(); - setMode(); } + + updateGameboyByteFrame(); // Send out Bytes to LSDJ + updateStatusLed(); // Update our status blinker + setMode(); // Check if mode button was depressed } } -void playLSDJKeyboard() + + + /* + changeLSDJInstrument does what it does via magic (rtfm, realize the fucking magic) + */ +void changeLSDJInstrument(byte channel,byte message) { - if(incomingMidiData[0] == keyboardInstrumentMidiChannel && incomingMidiData[2] > 0x00) { - playLSDJKeyboardNote(); + keyboardCurrentIns = message; //set the current instrument number + + if(channel == keyboardInstrumentMidiChannel && keyboardCurrentIns != keyboardLastIns) { + //if its on our midi channel and the instrument isnt the same as our currrent + if(!keyboardCompatabilityMode) { + addGameboyByte(0x80 | message); // <- this is suppose to work but doesn't :/ + } else { + //We will find out which is greater, the current instrument or the last instrument. then + //cycle up or down to that instrument + if(keyboardCurrentIns > keyboardLastIns) { + keyboardDiff = keyboardCurrentIns - keyboardLastIns; + for(keyboardCount=0;keyboardCount keyboardLastIns) { - keyboardDiff = keyboardCurrentIns - keyboardLastIns; - for(keyboardCount=0;keyboardCount 0x00) { //If midi channel = ours and the velocity is greater then 0 + if(note >= keyboardNoteStart) { + keyboardNoteOffset = 0; + note = note - keyboardNoteStart; //subtract the octave offset to get a value ranging from 0 to 48 for comparison + + keyboardCurrentOct = note / 0x0C; //get a octave value from 0 to 4 by deviding the current note by 12 + changeLSDJOctave(); + + if(note >= 0x3C) keyboardNoteOffset = 0x0C; //if the note really high we need to use the second row of keyboard keys + note = (note % 12) + keyboardNoteOffset; //get a 0 to 11 range of notes and add the offset + addGameboyByte(keyboardNotes[note]); // and finally send the note + + } else if (note >= keyboardStartOctave) { //If we are at the octave below notes + keyboardDiff = note - keyboardStartOctave; //Get a value between 0 and 11 + if(keyboardDiff < 8 && keyboardDiff > 3) addGameboyByte(0xE0); //if we are sending cursor values we have to send a 0xE0 byte for "extended" pc keyboard mode + addGameboyByte(keyboardCommands[note - keyboardStartOctave]); //send the byte corrisponding to the note number in the keyboard command array } - keyboardLastIns = keyboardCurrentIns; } } -void playLSDJKeyboardNote() + + /* + changeLSDJOctave compares the last octave with the current one and then sends a byte + to shift the octave to match if need be. its pretty much the same as the changeLSDJInstrument function. + */ +void changeLSDJOctave() { - 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; - } else if (incomingMidiData[1] >= 0x18) { - keyboardCurrentOct = 2; - } else if (incomingMidiData[1] >= 0x0C) { - keyboardCurrentOct = 1; + if(keyboardCurrentOct != keyboardLastOct) { + if(!keyboardCompatabilityMode) { // This new mode doesnt work yet. :/ + keyboardCurrentOct = 0xB3 + keyboardCurrentOct; + addGameboyByte(keyboardCurrentOct); } else { - keyboardCurrentOct = 0; - } - - if(keyboardCurrentOct != keyboardLastOct) - { + ///We will find out which is greater, the current octave or the last. then + //cycle up or down to that octave if(keyboardCurrentOct > keyboardLastOct) { keyboardDiff = keyboardCurrentOct - keyboardLastOct; for(keyboardCount=0;keyboardCount=keyboardStartOctave) { - addGameboyByte(keyboardCommands[incomingMidiData[1] - keyboardStartOctave]); } } + /* + Reguardless how porely optimized my code is the real bottleneck is either LSDJ, gameboy, or the serial line, + Therefor a crude "buffer" is setup to capture the bytes we want to send and slowly output them to lsdj... + + addGameboyByte put a byte into our output buffer + */ + void addGameboyByte(byte send_byte) { - serialWriteBuffer[writePosition] = send_byte; - writePosition++; - writePosition = writePosition % 256; + serialWriteBuffer[writePosition] = send_byte; //assign new byte + writePosition++; //increment the write position + writePosition = writePosition % 256; //make sure our write position is between 0 to 255 by using a mod of 256 } + /* + updateGameboyByteFrame is responcible responsibel resp.... job is to wait a period of time, + and then send a byte to the gameboy byte output function. + */ void updateGameboyByteFrame() { - if(readPosition != writePosition){ - waitClock++; - if(waitClock > 100) { - waitClock=0; - statusLedOn(); - sendByteToGameboy(serialWriteBuffer[readPosition]); - readPosition++; - readPosition = readPosition % 256; + if(readPosition != writePosition){ //if we have something to read out + waitClock++; //then increment our counter + if(waitClock > 80) { //if we've exceeded our wait time + waitClock=0; //reset the counter + statusLedOn(); //turn on the awesome visuals + sendByteToGameboy(serialWriteBuffer[readPosition]); //send the byte out + readPosition++; //increment our read position + readPosition = readPosition % 256; //wrap our reading range from 0 to 255 } } } + /* + sendByteToGameboy does what it says. yay magic + */ void sendByteToGameboy(byte send_byte) { - for(countLSDJTicks=0;countLSDJTicks<8;countLSDJTicks++) { - digitalWrite(pinGBClock,HIGH); - if(send_byte & 0x01) { - digitalWrite(pinGBSerialOut,HIGH); + for(countLSDJTicks=0;countLSDJTicks<8;countLSDJTicks++) { //we are going to send 8 bits, so do a loop 8 times + digitalWrite(pinGBClock,HIGH); //Set our clock output to 1 + if(send_byte & 0x01) { //if the first bit is equal to 1 + digitalWrite(pinGBSerialOut,HIGH); //then send a 1 } else { - digitalWrite(pinGBSerialOut,LOW); + digitalWrite(pinGBSerialOut,LOW); //send a 0 } - send_byte >>= 1; - digitalWrite(pinGBClock,LOW); + send_byte >>= 1; //bitshift right once for the next bit we are going to send + digitalWrite(pinGBClock,LOW); //send a 0 to the clock, we finished sending the bit } - digitalWrite(pinGBSerialOut,LOW); + digitalWrite(pinGBSerialOut,LOW); //make sure the serial state returns to 0 after its done sending the bits } - diff --git a/Arduinoboy/Mode_LSDJ_MasterSync.ino b/Arduinoboy/Mode_LSDJ_MasterSync.ino index 226ba61..fd7f4c4 100755 --- a/Arduinoboy/Mode_LSDJ_MasterSync.ino +++ b/Arduinoboy/Mode_LSDJ_MasterSync.ino @@ -11,45 +11,80 @@ * * ***************************************************************************/ + void modeLSDJMasterSyncSetup() { - pinMode(pinGBClock,INPUT); + digitalWrite(pinStatusLed,LOW); + pinMode(pinGBClock,INPUT); //Set the gb clock as input, we will be reading from the clock modeLSDJMasterSync(); } + void modeLSDJMasterSync() { while(1){ - readgbClockLine = digitalRead(pinGBClock); //Read gameboy's clock line - if(readgbClockLine) { - while(readgbClockLine) { - countClockPause++; - if(sequencerStarted && countClockPause > 16000) { - Serial.print(0xFC, BYTE); - countClockPause = 0; - sequencerStop(); + readgbClockLine = digitalRead(pinGBClock); //Read gameboy's clock line + + if(readgbClockLine) { //If Gb's Clock is On + while(readgbClockLine) { //Loop untill its off + checkLSDJStopped(); //Check if LSDJ hit Stop + readgbClockLine = digitalRead(pinGBClock); //Read the clock again + bit = digitalRead(pinGBSerialIn); //Read the serial input for song position + setMode(); } - readgbClockLine = digitalRead(pinGBClock); - setMode(); + countClockPause= 0; //Reset our wait timer for detecting a sequencer stop + + readGbSerialIn = readGbSerialIn << 1; //left shift the serial byte by one to append new bit from last loop + readGbSerialIn = readGbSerialIn + bit; //and then add the bit that was read + + sendMidiClockSlaveFromLSDJ(); //send the clock & start offset data to midi } - updateStatusLed(); - countClockPause = 0; - countGbClockTicks++; - if(countGbClockTicks == 8) { - countGbClockTicks=0; - if(!sequencerStarted) { - Serial.print(0xFA, BYTE); - sequencerStart(); - } - Serial.print(0xF8, BYTE); - if(!countSyncPulse) statusLedOn(); - countSyncPulse++; - countSyncPulse = countSyncPulse % 24; + + if (Serial.available() > 0) { //If serial data was send to midi input + incomingMidiByte = Serial.read(); //Read it + Serial.print(incomingMidiByte, BYTE); //Send it to the midi output } } - if (Serial.available() > 0) { - incomingMidiByte = Serial.read(); - Serial.print(incomingMidiByte, BYTE); - } - setMode(); +} + + /* + checkLSDJStopped counts how long the clock was on, if its been on too long we assume + LSDJ has stopped- Send a MIDI transport stop message and return true. + */ +boolean checkLSDJStopped() +{ + countClockPause++; //Increment the counter + if(countClockPause > 16000) { //if we've reached our waiting period + if(sequencerStarted) { + countClockPause = 0; //reset our clock + Serial.print(0xFC, BYTE); //send the transport stop message + sequencerStop(); //call the global sequencer stop function + } + return true; } + return false; +} + + /* + sendMidiClockSlaveFromLSDJ waits for 8 clock bits from LSDJ, + sends the transport start command if sequencer hasnt started yet, + sends the midi clock tick, and sends a note value that corrisponds to + LSDJ's row number on start (LSDJ only sends this once when it starts) + */ +void sendMidiClockSlaveFromLSDJ() +{ + countGbClockTicks++; //Increment the bit counter + if(countGbClockTicks == 8) { //If we hit 8 bits + if(!sequencerStarted) { //If the sequencer hasnt started + Serial.print(masterNotePositionMidiChannel, BYTE); //Send the midi channel byte + Serial.print(readGbSerialIn, BYTE); //Send the row value as a note + Serial.print(0x7F, BYTE); //Send a velocity 127 + + Serial.print(0xFA, BYTE); //send MIDI transport start message + sequencerStart(); //call the global sequencer start function + } + Serial.print(0xF8, BYTE); //Send the MIDI Clock Tick + + countGbClockTicks=0; //Reset the bit counter + readGbSerialIn = 0x00; //Reset our serial read value + } } diff --git a/Arduinoboy/Mode_LSDJ_SlaveSync.ino b/Arduinoboy/Mode_LSDJ_SlaveSync.ino index e44cf59..693575f 100755 --- a/Arduinoboy/Mode_LSDJ_SlaveSync.ino +++ b/Arduinoboy/Mode_LSDJ_SlaveSync.ino @@ -13,65 +13,90 @@ void modeLSDJSlaveSyncSetup() { - pinMode(pinGBClock,OUTPUT); + digitalWrite(pinStatusLed,LOW); + pinMode(pinGBClock,OUTPUT); //Set the gb clock as output + digitalWrite(pinGBClock,HIGH); //Gameboy likes to get high + digitalWrite(pinGBSerialOut,LOW);//Nothing to send + modeLSDJSlaveSync(); } void modeLSDJSlaveSync() { - while(1){ - 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 && midiSyncEffectsTime && !countSyncTime - || sequencerStarted && !midiSyncEffectsTime) { - sendClockTickToLSDJ(); + while(1){ //Loop forever + if (Serial.available() > 0) { //If MIDI Byte Availaibleleleiel + incomingMidiByte = Serial.read(); //Read it + Serial.print(incomingMidiByte, BYTE); //Send it back to the Midi out + + if(incomingMidiByte > 0x7F) { //If we have received a MIDI Status Byte + switch (incomingMidiByte) { + case 0xF8: //Case: Clock Message Recieved + if(sequencerStarted && midiSyncEffectsTime && !countSyncTime //If the seq has started and our sync effect is on and at zero + || sequencerStarted && !midiSyncEffectsTime) { //or seq is started and there is no sync effects + if(!countSyncPulse && midiDefaultStartOffset) { //if we received a note for start offset + sendByteReversed(midiDefaultStartOffset); //send the offset + } + sendClockTickToLSDJ(); //send the clock tick } - if(midiSyncEffectsTime) { - countSyncTime++; - countSyncTime = countSyncTime % countSyncSteps; + if(midiSyncEffectsTime) { //If sync effects are turned on + countSyncTime++; //increment our tick counter + countSyncTime = countSyncTime % countSyncSteps; //and mod it by the number of steps we want for the effect } - if(!countSyncPulse) statusLedOn(); - countSyncPulse++; - countSyncPulse = countSyncPulse % 24; break; - case 0xFA: // Transport Start Message - case 0xFB: // Transport Continue Message - sequencerStart(); + case 0xFA: // Case: Transport Start Message + case 0xFB: // and Case: Transport Continue Message + sequencerStart(); // Start the sequencer break; - case 0xFC: // Transport Stop Message - sequencerStop(); + case 0xFC: // Case: Transport Stop Message + sequencerStop(); // Stop the sequencer break; default: - if(incomingMidiByte == syncEffectsMidiChannel) { - midiNoteOnMode = true; + if(incomingMidiByte == syncEffectsMidiChannel) { //if a midi note was received and its on the channel of the sync effects channel + midiNoteOnMode = true; //turn on note capture + incomingMidiData[0] = false; //and reset the captured note } else { - midiNoteOnMode = false; + midiNoteOnMode = false; //turn off note capture } - } - } else if(midiNoteOnMode) { - if(!incomingMidiData[0]) { - incomingMidiData[0] = incomingMidiByte; - } else { - incomingMidiData[1] = incomingMidiByte; - getNote(); - incomingMidiData[0] = false; + } + } else if(midiNoteOnMode) { //if we've received a message thats not a status and our note capture mode is true + if(!incomingMidiData[0]) { //if there is no note number yet + incomingMidiData[0] = incomingMidiByte; //then assume the byte is a note and assign it to a place holder + } else { //else assumed velocity + if(incomingMidiByte > 0x00) { + getSlaveSyncEffect(incomingMidiData[0]); //then call our sync effects function + } + incomingMidiData[0] = false; //and reset the captured note } } - setMode(); - updateStatusLed(); - } else { - setMode(); - updateStatusLed(); } - + setMode(); //Check if the mode button was depressed } } +/* + Again its magic time, but this time its backweirds + We'll send a byte to the gameboy starting with big endian + From this point on I'm sick of writing comments +*/ +void sendByteReversed(byte send_byte) +{ + for(countLSDJTicks=0;countLSDJTicks<8;countLSDJTicks++) { //NEWS FLASH: there are 8 bits in a byte + digitalWrite(pinGBClock,LOW); //Set the clock to zero, wes about to send you somethin + if(send_byte & 0x80) { //Magic + digitalWrite(pinGBSerialOut,HIGH); //1 + } else { + digitalWrite(pinGBSerialOut,LOW); //0 + } + send_byte <<= 1; //More magic + digitalWrite(pinGBClock,HIGH); //Make the clock 1, so we can make a funky squarewave + } + digitalWrite(pinGBSerialOut,LOW); //We are done, turn the serial off +} + +/* + sendClockTickToLSDJ is a lovely loving simple function I wish they where all this short + Technicallyly we are sending nothing but a 8bit clock pulse +*/ void sendClockTickToLSDJ() { for(countLSDJTicks=0;countLSDJTicks<8;countLSDJTicks++) { @@ -79,40 +104,38 @@ void sendClockTickToLSDJ() } } -void getNote() +/* + getSlaveSyncEffect receives a note, and assigns the propper effect of that note +*/ +void getSlaveSyncEffect(byte note) { - if(incomingMidiData[1] > 0) { - switch(incomingMidiData[0]) { - case 48: - statusLedOn(); + switch(note) { + case 48: //C-3ish, Transport Start sequencerStart(); break; - case 49: - statusLedOn(); + case 49: //C#3 Transport Stop sequencerStop(); break; - case 50: + case 50: //D-3 Turn off sync effects midiSyncEffectsTime = false; - statusLedOn(); break; - case 51: + case 51: //D#3 Sync effect, 1/2 time midiSyncEffectsTime = true; countSyncTime = 0; countSyncSteps = 2; - statusLedOn(); break; - case 52: + case 52: //E-3 Sync Effect, 1/4 time midiSyncEffectsTime = true; countSyncTime = 0; countSyncSteps = 4; - statusLedOn(); break; - case 53: + case 53: //F-3 Sync Effect, 1/8 time midiSyncEffectsTime = true; countSyncTime = 0; countSyncSteps = 8; - statusLedOn(); + break; + default: //All other notes will make LSDJ Start at the row number thats the same as the note number. + midiDefaultStartOffset = incomingMidiData[0]; break; } - } } diff --git a/Arduinoboy/Mode_Nanoloop.ino b/Arduinoboy/Mode_Nanoloop.ino index 3bcf443..293c8c3 100755 --- a/Arduinoboy/Mode_Nanoloop.ino +++ b/Arduinoboy/Mode_Nanoloop.ino @@ -13,21 +13,24 @@ void modeNanoloopSetup() { - pinMode(pinGBClock,OUTPUT); - digitalWrite(pinGBClock,LOW); + digitalWrite(pinStatusLed,LOW); + pinMode(pinGBClock,OUTPUT); //Set the gb clock as output + digitalWrite(pinGBClock,LOW); //Gameboy likes to get low + modeNanoloopSync(); } void modeNanoloopSync() { - while(1){ - 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 + while(1){ //Loop forever + if (Serial.available() > 0) { //If MIDI Byte Availaibleleleiel + incomingMidiByte = Serial.read(); //Read it + Serial.print(incomingMidiByte, BYTE); //Send it back to the Midi out + + if(incomingMidiByte > 0x7F) { //If we have received a MIDI Status Byte + switch (incomingMidiByte) { + case 0xF8: // Clock Message Recieved + // Send a clock tick out if the sequencer is running if(sequencerStarted) { nanoSkipSync = !nanoSkipSync; if(countSyncTime) { @@ -37,29 +40,22 @@ void modeNanoloopSync() } nanoState = sendTickToNanoloop(nanoState, nanoSkipSync); - if(!countSyncPulse) statusLedOn(); - countSyncPulse++; - countSyncPulse = countSyncPulse % 24; break; } break; - case 0xFA: // Transport Start Message - case 0xFB: // Transport Continue Message + case 0xFA: // Transport Start Message + case 0xFB: // Transport Continue Message sequencerStart(); break; - case 0xFC: // Transport Stop Message + case 0xFC: // Transport Stop Message sequencerStop(); break; default: break; } } - setMode(); - updateStatusLed(); - } else { - setMode(); - updateStatusLed(); } + setMode(); //Check if the mode button was depressed } } diff --git a/Arduinoboy/Mode_PushPin.ino b/Arduinoboy/Mode_PushPin.ino deleted file mode 100755 index 19c7d1c..0000000 --- a/Arduinoboy/Mode_PushPin.ino +++ /dev/null @@ -1,21 +0,0 @@ -/************************************************************************** - * Name: Timothy Lamb * - * Email: trash80@gmail.com * - ***************************************************************************/ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -// Placeholder, not implemented yet. :/ -void modePushpinSetup() -{ - pinMode(pinGBClock,OUTPUT); - while(1){ - setMode(); - } -} diff --git a/Arduinoboy/Temp.ino b/Arduinoboy/Temp.ino deleted file mode 100755 index e69de29..0000000 diff --git a/Schematic/arduinoboy-schem-v.0.9.8.png b/Schematic/arduinoboy-schem-v.0.9.8.png new file mode 100644 index 0000000000000000000000000000000000000000..6106564c8eb16dc8195a5ca3db6e73d66e02245c GIT binary patch literal 79538 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 Ef`=gSqyPW_ literal 0 HcmV?d00001