diff --git a/Software/Gravity/Gravity.ino b/Software/Gravity/Gravity.ino index 8fe80d9..aab6e25 100644 --- a/Software/Gravity/Gravity.ino +++ b/Software/Gravity/Gravity.ino @@ -85,7 +85,7 @@ bool seqB8[16] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0}; bool *currentSeq; byte currentStep = 0; -byte memCode = 'A'; //Change to different letter if you changed the data structure +byte memCode = 'a'; //Change to different letter if you changed the data structure unsigned int channelPulseCount[6]; unsigned int channelPulsesPerCycle[6]; @@ -108,9 +108,12 @@ byte displayTab = 0; bool insideTab = false; byte menuItem = 0; byte lastMenuItem = 3; +byte displayScreen = 0; //0 - main, 1 - sequencer, 2 - settings + bool playBtnPushed = false; bool shiftBtnPushed = false; + int a1Input = 0; int a2Input = 0; @@ -161,6 +164,38 @@ void setup() { EEPROM.get(addr, masterClockMode); addr = addr + sizeof(masterClockMode); EEPROM.get(addr, channels); + addr = addr + sizeof(channels); + EEPROM.get(addr, seqA1); + addr = addr + sizeof(seqA1); + EEPROM.get(addr, seqA2); + addr = addr + sizeof(seqA2); + EEPROM.get(addr, seqA3); + addr = addr + sizeof(seqA3); + EEPROM.get(addr, seqA4); + addr = addr + sizeof(seqA4); + EEPROM.get(addr, seqA5); + addr = addr + sizeof(seqA5); + EEPROM.get(addr, seqA6); + addr = addr + sizeof(seqA6); + EEPROM.get(addr, seqA7); + addr = addr + sizeof(seqA7); + EEPROM.get(addr, seqA8); + addr = addr + sizeof(seqA8); + EEPROM.get(addr, seqB1); + addr = addr + sizeof(seqB1); + EEPROM.get(addr, seqB2); + addr = addr + sizeof(seqB2); + EEPROM.get(addr, seqB3); + addr = addr + sizeof(seqB3); + EEPROM.get(addr, seqB4); + addr = addr + sizeof(seqB4); + EEPROM.get(addr, seqB5); + addr = addr + sizeof(seqB5); + EEPROM.get(addr, seqB6); + addr = addr + sizeof(seqB6); + EEPROM.get(addr, seqB7); + addr = addr + sizeof(seqB7); + EEPROM.get(addr, seqB8); } else { saveState(); EEPROM.write(1023, memCode); @@ -188,12 +223,6 @@ void setup() { void loop() { checkInputs(); - /*if ((millis() - lastInteractionTime) > SCREEN_TIMEOUT) { - display.clearDisplay(); - display.display(); - if (masterClockMode == 2 || masterClockMode == 3) { - calculateBPMTiming(); - }}*/ } void clock() { @@ -430,4 +459,36 @@ void saveState() { EEPROM.put(addr, masterClockMode); addr = addr + sizeof(masterClockMode); EEPROM.put(addr, channels); + addr = addr + sizeof(channels); + EEPROM.put(addr, seqA1); + addr = addr + sizeof(seqA1); + EEPROM.put(addr, seqA2); + addr = addr + sizeof(seqA2); + EEPROM.put(addr, seqA3); + addr = addr + sizeof(seqA3); + EEPROM.put(addr, seqA4); + addr = addr + sizeof(seqA4); + EEPROM.put(addr, seqA5); + addr = addr + sizeof(seqA5); + EEPROM.put(addr, seqA6); + addr = addr + sizeof(seqA6); + EEPROM.put(addr, seqA7); + addr = addr + sizeof(seqA7); + EEPROM.put(addr, seqA8); + addr = addr + sizeof(seqA8); + EEPROM.put(addr, seqB1); + addr = addr + sizeof(seqB1); + EEPROM.put(addr, seqB2); + addr = addr + sizeof(seqB2); + EEPROM.put(addr, seqB3); + addr = addr + sizeof(seqB3); + EEPROM.put(addr, seqB4); + addr = addr + sizeof(seqB4); + EEPROM.put(addr, seqB5); + addr = addr + sizeof(seqB5); + EEPROM.put(addr, seqB6); + addr = addr + sizeof(seqB6); + EEPROM.put(addr, seqB7); + addr = addr + sizeof(seqB7); + EEPROM.put(addr, seqB8); } \ No newline at end of file diff --git a/Software/Gravity/InputsCheck.ino b/Software/Gravity/InputsCheck.ino index ea2349e..86ef2b6 100644 --- a/Software/Gravity/InputsCheck.ino +++ b/Software/Gravity/InputsCheck.ino @@ -41,17 +41,19 @@ void checkInputs() { } else if (bpm < MINBPM) { bpm = MINBPM; } + saveState(); calculateBPMTiming(); } else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 0) { //Change Subdiv channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change; - if (channels[displayTab - 1].subDiv > 200) { + if (channels[displayTab - 1].subDiv > 100) { channels[displayTab - 1].subDiv = 0; - } else if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(byte)) - 1) { - channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(byte)) - 1; + } if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(int)) - 1) { + channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(int)) - 1; } if (!isPlaying) { calculateCycles(); } + saveState(); } else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 1) { //Change Random channels[displayTab - 1].random = channels[displayTab - 1].random + change; if (channels[displayTab - 1].random > 100) { @@ -59,6 +61,7 @@ void checkInputs() { } else if (channels[displayTab - 1].random > 9) { channels[displayTab - 1].random = 9; } + saveState(); } else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 2) { //Change SEQ pattern channels[displayTab - 1].seqPattern = channels[displayTab - 1].seqPattern + change; if (channels[displayTab - 1].seqPattern > 100) { @@ -66,7 +69,7 @@ void checkInputs() { } else if (channels[displayTab - 1].seqPattern > 16) { channels[displayTab - 1].seqPattern = 16; } - + saveState(); } else if (insideTab && !shiftBtnPushed) { menuItem = menuItem + change; @@ -82,6 +85,7 @@ void checkInputs() { } else if (masterClockMode > 1) { masterClockMode = 1; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 1) { //Modulation channel bpmModulationChannel = bpmModulationChannel + change; if (bpmModulationChannel == 0 || bpmModulationChannel == 1) { @@ -92,6 +96,7 @@ void checkInputs() { } else if (bpmModulationChannel > 1) { bpmModulationChannel = 1; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 2) { //Modulation range bpmModulationRange = bpmModulationRange + change; if (bpmModulationRange == 0) { @@ -101,6 +106,7 @@ void checkInputs() { } else if (bpmModulationRange > 5) { //50bpm bpmModulationRange = 5; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 0) { //Channel Mode channels[displayTab - 1].mode = channels[displayTab - 1].mode + change; if (channels[displayTab - 1].mode > 100) { @@ -108,6 +114,7 @@ void checkInputs() { } else if (channels[displayTab - 1].mode > 2) { channels[displayTab - 1].mode = 2; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 0) { //Offset channels[displayTab - 1].offset = channels[displayTab - 1].offset + change; if (channels[displayTab - 1].offset > 100) { @@ -115,6 +122,7 @@ void checkInputs() { } else if (channels[displayTab - 1].offset > channelPulsesPerCycle[displayTab-1]) { channels[displayTab - 1].offset = channelPulsesPerCycle[displayTab-1]; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 1) { //SUBDIV for RANDOM channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change; if (channels[displayTab - 1].subDiv > 200) { @@ -125,6 +133,7 @@ void checkInputs() { if (!isPlaying) { calculateCycles(); } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 0) { //CV1 for CLK channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change; if (channels[displayTab - 1].CV1Target > 100) { @@ -132,6 +141,7 @@ void checkInputs() { } else if (channels[displayTab - 1].CV1Target > 1) { channels[displayTab - 1].CV1Target = 1; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 0) { //CV2 for CLK channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change; @@ -140,6 +150,7 @@ void checkInputs() { } else if (channels[displayTab - 1].CV2Target > 1) { channels[displayTab - 1].CV2Target = 1; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 1) { //CV1 for RND channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change; if (channels[displayTab - 1].CV1Target > 100) { @@ -147,6 +158,7 @@ void checkInputs() { } else if (channels[displayTab - 1].CV1Target > 2) { channels[displayTab - 1].CV1Target = 2; } + saveState(); } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 1) { //CV2 for RND channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change; @@ -155,6 +167,7 @@ void checkInputs() { } else if (channels[displayTab - 1].CV2Target > 2) { channels[displayTab - 1].CV2Target = 2; } + saveState(); } updateScreen(); @@ -169,7 +182,6 @@ void checkInputs() { isPlaying = !isPlaying; } playBtnPushed = true; - saveState(); updateScreen(); //to wake up the screen if turned off } else if (digitalRead(START_STOP_BTN_PIN) && playBtnPushed) { playBtnPushed = false; diff --git a/Software/Gravity/UI.ino b/Software/Gravity/UI.ino index 8330714..f5b9b17 100644 --- a/Software/Gravity/UI.ino +++ b/Software/Gravity/UI.ino @@ -363,5 +363,11 @@ void updateScreen() { } } + if (!isPlaying) { + u8g2.drawUTF8(121, yPos, "t"); + } else { + u8g2.drawUTF8(122, yPos, "r"); + } + } while ( u8g2.nextPage() ); } \ No newline at end of file