diff --git a/Software/Gravity/Gravity.ino b/Software/Gravity/Gravity.ino index d120d97..c891f79 100644 --- a/Software/Gravity/Gravity.ino +++ b/Software/Gravity/Gravity.ino @@ -6,7 +6,8 @@ #include #include -const char version[5] = "1.1.1"; +//const char version[5] = "1.1.1"; +String version = "1.1.1"; #define SCREEN_ADDRESS 0x3C @@ -42,13 +43,13 @@ bool reverseEnc = false; #define ANALOGUE_INPUT_2_PIN A1 const byte clockOutPin = 13; -const int outsPins[6] = {6, 11, 7, 10, 8, 9}; +const byte outsPins[6] = {6, 11, 7, 10, 8, 9}; bool rotateScreen = true; */ -int CV1Calibration = 512; -int CV2Calibration = 512; +uint16_t CV1Calibration = 512; +uint16_t CV2Calibration = 512; bool showDone = false; const int subDivs[20] = { -24, -12, -8, -6, -4, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 16, 24, 32, 64, 128 }; //positive - divide, negative - multiply, 0 - off @@ -64,7 +65,7 @@ struct channel { byte CV1Range; byte CV2Target; byte CV2Range; - unsigned int offset; + uint8_t offset; byte random; byte seqPattern; }; @@ -662,7 +663,7 @@ void reboot() { void calibrateCVs() { CV1Calibration = analogRead(ANALOGUE_INPUT_1_PIN); CV2Calibration = analogRead(ANALOGUE_INPUT_2_PIN); - //saveState(); + saveState(); showDone = true; updateScreen(); } diff --git a/Software/Gravity/UI.ino b/Software/Gravity/UI.ino index 021ba83..4eecbfc 100644 --- a/Software/Gravity/UI.ino +++ b/Software/Gravity/UI.ino @@ -4,9 +4,7 @@ void updateScreen() { do { byte leftOffset; byte width; - //String textToShow; String valueStr; - //char valueChar[16]; u8g2.setDrawColor(1); if (displayScreen == 0) { @@ -31,15 +29,14 @@ void updateScreen() { for (byte i = 1; i <= lastMenuItem; i++) { if (i == 1) { - valueStr = "MODE:"; + valueStr = F("MODE:"); } else if (i == 2 && masterClockMode == 0) { - valueStr = "MOD:"; + valueStr = F("MOD:"); } else if (i == 2 && masterClockMode == 1) { - valueStr = "PPQN:"; + valueStr = F("PPQN:"); } else if (i == 3 && masterClockMode == 0) { - valueStr = "RANGE:"; + valueStr = F("RANGE:"); } - //valueStr.toCharArray(valueChar, 16); if (menuItem == i && insideTab) { u8g2.drawButtonUTF8(leftOffset, 8 + (i-1) *11, U8G2_BTN_BW1|U8G2_BTN_INV, width, 1, 2, valueStr.c_str() ); } else { @@ -53,26 +50,24 @@ void updateScreen() { //Values for (byte i = 1; i <= lastMenuItem; i++) { if (i == 1 && masterClockMode == 0) { //Channel mode - valueStr = "INT"; + valueStr = F("INT"); } else if (i == 1 && masterClockMode == 1) { - valueStr = "EXT"; + valueStr = F("EXT"); } else if (i == 1 && masterClockMode == 2) { - valueStr = "MIDI"; + valueStr = F("MIDI"); } else if (i == 2 && masterClockMode == 0 && bpmModulationRange != 0 && bpmModulationChannel == 0) { - valueStr = "CV1"; + valueStr = F("CV1"); } else if (i == 2 && masterClockMode == 0 && bpmModulationRange != 0 && bpmModulationChannel == 1) { - valueStr = "CV2"; + valueStr = F("CV2"); } else if (i == 2 && masterClockMode == 0 && bpmModulationRange == 0) { - valueStr = "OFF"; + valueStr = F("OFF"); } else if (i == 2 && masterClockMode == 1 && extClockPPQN == 0) { - valueStr = "24"; + valueStr = F("24"); } else if (i == 2 && masterClockMode == 1 && extClockPPQN == 1) { - valueStr = "4"; + valueStr = F("4"); } else if (i == 3 && bpmModulationRange != 0) { valueStr = String(bpmModulationRange * 10); } - - //valueStr.toCharArray(valueChar, 16); if (menuItem == i && insideTab && (menuItemSelected || shiftBtnPushed)) { u8g2.drawButtonUTF8(leftOffset + 37, 8 + (i-1) *11, U8G2_BTN_BW1, 26, 2, 2, valueStr.c_str() ); @@ -83,43 +78,40 @@ void updateScreen() { } } - - String bpmStr; if (masterClockMode == 0) { - bpmStr = String(bpm); + valueStr = String(bpm); } else if (masterClockMode == 1) { - bpmStr = "EXT"; + valueStr = F("EXT"); } else if (masterClockMode == 2) { - bpmStr = "MIDI"; + valueStr = F("MIDI"); } - char bpmChar[5]; - bpmStr.toCharArray(bpmChar, 5); leftOffset = 29; width = 55; if (masterClockMode == 0) { if ((!insideTab && !shiftBtnPushed) || (insideTab && menuItem != 0)) { //default view, nothing is selected or editable u8g2.setFont(stkL); - u8g2.drawButtonUTF8(leftOffset-1, 28, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 3, bpmChar ); + u8g2.drawButtonUTF8(leftOffset-1, 28, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() ); u8g2.setFont(velvetscreen); - u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 2, "BPM" ); + valueStr = F("BPM"); + u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 2, valueStr.c_str() ); } else if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) { //show value as editable u8g2.setFont(stkL); - u8g2.drawButtonUTF8(leftOffset-1, 28, U8G2_BTN_BW1|U8G2_BTN_HCENTER, width, 0, 3, bpmChar ); + u8g2.drawButtonUTF8(leftOffset-1, 28, U8G2_BTN_BW1|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() ); u8g2.setFont(velvetscreen); - u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 2, "BPM" ); + valueStr = F("BPM"); + u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 2, valueStr.c_str() ); } else if (insideTab && menuItem == 0 && !menuItemSelected) { //show as selected menu item u8g2.setFont(stkL); - u8g2.drawButtonUTF8(leftOffset-1, 28, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 3, bpmChar ); + u8g2.drawButtonUTF8(leftOffset-1, 28, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() ); u8g2.setFont(velvetscreen); - u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 2, "BPM" ); + valueStr = F("BPM"); + u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 2, valueStr.c_str() ); } } if (masterClockMode != 0) { //EXT and MIDI u8g2.setFont(stkL); - u8g2.drawButtonUTF8(leftOffset, 28, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 0, bpmChar ); - //u8g2.setFont(velvetscreen); - //u8g2.drawButtonUTF8(leftOffset, 40, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 2, "PPQN" ); + u8g2.drawButtonUTF8(leftOffset, 28, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 0, 0, valueStr.c_str() ); } } @@ -131,17 +123,16 @@ void updateScreen() { leftOffset = 62; for (byte i = 1; i <= lastMenuItem; i++) { if (i == 1) { - valueStr = "MODE:"; + valueStr = F("MODE:"); } else if (i == 2 && channels[displayTab - 1].mode == 0) { - valueStr = "OFFSET:"; + valueStr = F("OFFSET:"); } else if (i == 2 && channels[displayTab - 1].mode == 1) { - valueStr = "SUBDIV:"; + valueStr = F("SUBDIV:"); } else if (i == 2 && channels[displayTab - 1].mode == 2) { - valueStr = "EDIT PATTERN"; + valueStr = F("EDIT PATTERN"); } else if (i == 3) { - valueStr = "MOD:"; + valueStr = F("MOD:"); } - //valueStr.toCharArray(valueChar, 16); if (menuItem == i && insideTab) { u8g2.drawButtonUTF8(leftOffset, 8 + (i-1) *11, U8G2_BTN_BW1|U8G2_BTN_INV, width, 1, 2, valueStr.c_str() ); } else { @@ -152,11 +143,11 @@ void updateScreen() { //Values for (byte i = 1; i <= lastMenuItem; i++) { if (i == 1 && channels[displayTab - 1].mode == 0) { //Channel mode - valueStr = "CLOCK"; + valueStr = F("CLOCK"); } else if (i == 1 && channels[displayTab - 1].mode == 1) { - valueStr = "RAND"; + valueStr = F("RAND"); } else if (i == 1 && channels[displayTab - 1].mode == 2) { - valueStr = "SEQ"; + valueStr = F("SEQ"); } else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset valueStr = String(channels[displayTab - 1].offset) + "/"; int PulsesPerStep; @@ -171,14 +162,13 @@ void updateScreen() { } else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] < 0) { valueStr = "x" + String(abs(subDivs[channels[displayTab - 1].subDiv])); } else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 0) { //MOD - valueStr = "OFF"; + valueStr = F("OFF"); } else if (i == 3 && channels[displayTab - 1].CV1Target != 0 && channels[displayTab - 1].CV2Target == 0) { - valueStr = "CV1"; + valueStr = F("CV1"); } else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target != 0) { - valueStr = "CV2"; + valueStr = F("CV2"); } - //valueStr.toCharArray(valueChar, 16); if (i == 2 && channels[displayTab - 1].mode == 2) { //EDIT PATTERN thing if (menuItem == i && insideTab) { u8g2.drawBox(leftOffset + 54, ((i-1) * 11), 11, 11); @@ -204,7 +194,6 @@ void updateScreen() { } else if (channels[displayTab - 1].mode == 2) { valueStr = F("PATTERN"); } - //valueStr.toCharArray(valueChar, 16); if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0)) { u8g2.drawButtonUTF8(leftOffset, 41, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() ); } else { @@ -226,7 +215,6 @@ void updateScreen() { valueStr = "B" + String(channels[displayTab - 1].seqPattern - 7); } } - //valueStr.toCharArray(valueChar, 16); u8g2.setFont(stkL); if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) { u8g2.drawButtonUTF8(leftOffset, 28, U8G2_BTN_BW1|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() ); @@ -242,35 +230,35 @@ void updateScreen() { u8g2.setFont(velvetscreen); byte yPos = 61; byte xWidth = 12; + valueStr = F("w"); if (displayTab == 0) { if (insideTab == true || shiftBtnPushed == true) { - u8g2.drawButtonUTF8(xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_HCENTER, xWidth-2, 0, 2, "w" ); + u8g2.drawButtonUTF8(xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_HCENTER, xWidth-2, 0, 2, valueStr.c_str() ); } else { - u8g2.drawButtonUTF8(xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, xWidth-2, 0, 2, "w" ); + u8g2.drawButtonUTF8(xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, xWidth-2, 0, 2, valueStr.c_str() ); } } else { - u8g2.drawButtonUTF8(xWidth/2, yPos, U8G2_BTN_BW0|U8G2_BTN_HCENTER, xWidth, 0, 2, "w" ); + u8g2.drawButtonUTF8(xWidth/2, yPos, U8G2_BTN_BW0|U8G2_BTN_HCENTER, xWidth, 0, 2, valueStr.c_str() ); } for (int i = 1; i <= 6; i++) { - String tabNameStr = String(i); - char tabNameChar[3]; - tabNameStr.toCharArray(tabNameChar, 3); + valueStr = String(i); if (displayTab == i) { if (insideTab == true || shiftBtnPushed == true) { - u8g2.drawButtonUTF8(i*xWidth + xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_HCENTER, xWidth-2, 0, 2, tabNameChar); + u8g2.drawButtonUTF8(i*xWidth + xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_HCENTER, xWidth-2, 0, 2, valueStr.c_str()); } else { - u8g2.drawButtonUTF8(i*xWidth + xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, xWidth-2, 0, 2, tabNameChar); + u8g2.drawButtonUTF8(i*xWidth + xWidth/2, yPos, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, xWidth-2, 0, 2, valueStr.c_str()); } } else { - u8g2.drawButtonUTF8(i*xWidth + xWidth/2, yPos, U8G2_BTN_BW0|U8G2_BTN_HCENTER, xWidth, 0, 2, tabNameChar); + u8g2.drawButtonUTF8(i*xWidth + xWidth/2, yPos, U8G2_BTN_BW0|U8G2_BTN_HCENTER, xWidth, 0, 2, valueStr.c_str()); } } + valueStr = F("t"); if (masterClockMode == 0 && !isPlaying) { - u8g2.drawUTF8(121, yPos, "t"); + u8g2.drawUTF8(121, yPos, valueStr.c_str() ); } else if (masterClockMode == 0 && isPlaying) { - u8g2.drawUTF8(122, yPos, "r"); + u8g2.drawUTF8(122, yPos, valueStr.c_str() ); } } @@ -278,16 +266,12 @@ void updateScreen() { else if (displayScreen == 1) { u8g2.setFont(velvetscreen); byte pattern = channels[displayTab - 1].seqPattern; - String patStr; if (pattern < 8) { - patStr = "PATTERN A" + String(pattern + 1); + valueStr = "PATTERN A" + String(pattern + 1); } else { - patStr = "PATTERN B" + String(pattern - 7); + valueStr = "PATTERN B" + String(pattern - 7); } - //patStr = "TEST"; - char patChar[11]; - patStr.toCharArray(patChar, 11); - u8g2.drawButtonUTF8(64, 5, U8G2_BTN_BW1|U8G2_BTN_HCENTER, 128, 0, 2, patChar ); + u8g2.drawButtonUTF8(64, 5, U8G2_BTN_BW1|U8G2_BTN_HCENTER, 128, 0, 2, valueStr.c_str() ); for (byte i = 0; i < 8; i++) { if (patternToEdit[i]) { u8g2.drawUTF8(19 + i*12, 24, "q"); @@ -311,14 +295,16 @@ void updateScreen() { } if (isRecording) { - u8g2.drawButtonUTF8(64, 62, U8G2_BTN_BW1|U8G2_BTN_HCENTER|U8G2_BTN_INV, 50, 0, 2, "RECORDING" ); + valueStr = F("RECORDING"); + u8g2.drawButtonUTF8(64, 62, U8G2_BTN_BW1|U8G2_BTN_HCENTER|U8G2_BTN_INV, 50, 0, 2, valueStr.c_str() ); } } //Settings Screen else if (displayScreen == 2) { - u8g2.drawStr(8, 5, "SETTINGS"); - u8g2.drawStr(102, 5, version ); + valueStr = F("SETTINGS"); + u8g2.drawStr(8, 5, valueStr.c_str() ); + u8g2.drawStr(102, 5, version.c_str() ); u8g2.drawHLine(0, 8, 128); lastMenuItem = 3; byte width = 112; @@ -331,13 +317,11 @@ void updateScreen() { valueStr = F("ROTATE SCREEN"); break; case 2: - valueStr = F("REVERSE ENCODER");//"REVERSE ENC"; - break; + valueStr = F("REVERSE ENCODER"); case 3: valueStr = F("FULL RESET"); break; }; - //valueStr.toCharArray(valueChar, 16); if (menuItem == i) { u8g2.drawButtonUTF8(8, 19 + (i*11), U8G2_BTN_BW0|U8G2_BTN_INV, width, 2, 3, valueStr.c_str() ); } else { @@ -353,7 +337,8 @@ void updateScreen() { u8g2.drawBox(18,13,93,32); u8g2.drawBox(18,16,96,30); u8g2.setDrawColor(1); - u8g2.drawButtonUTF8(64, 32, U8G2_BTN_BW1|U8G2_BTN_HCENTER|U8G2_BTN_SHADOW2|U8G2_BTN_INV, 64, 12, 12, "DONE" ); + valueStr = F("DONE"); + u8g2.drawButtonUTF8(64, 32, U8G2_BTN_BW1|U8G2_BTN_HCENTER|U8G2_BTN_SHADOW2|U8G2_BTN_INV, 64, 12, 12, valueStr.c_str() ); } } while ( u8g2.nextPage() );