diff --git a/Software/Gravity/Gravity.ino b/Software/Gravity/Gravity.ino index 4162117..7dc2335 100644 --- a/Software/Gravity/Gravity.ino +++ b/Software/Gravity/Gravity.ino @@ -1,9 +1,10 @@ #include -#include -#include +//#include +//#include #include #include #include +#include #define VERSION "0.9b" @@ -120,7 +121,7 @@ bool encPressRegistered; //unsigned long lastInteractionTime; // used for display timeout -Adafruit_SSD1306 display(128, 64, &Wire, -1); +U8G2_SSD1306_128X64_NONAME_2_HW_I2C u8g2(U8G2_R2, SCL, SDA, U8X8_PIN_NONE); RotaryEncoder encoder(ENC_D1_PIN, ENC_D2_PIN, RotaryEncoder::LatchMode::TWO03); const unsigned char splash_logo[] PROGMEM = { @@ -176,7 +177,7 @@ void setup() { pinMode(outsPins[i], OUTPUT); } - display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); + /*display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); display.setRotation(2); display.clearDisplay(); @@ -189,7 +190,9 @@ void setup() { display.print(F("V:")); display.print(F(VERSION)); display.display(); - delay(800); + delay(800);*/ + //u8g2.setI2CAddress(SCREEN_ADDRESS); + u8g2.begin(); updateScreen(); calculateCycles(); diff --git a/Software/Gravity/UI.ino b/Software/Gravity/UI.ino index feabaf2..897fed7 100644 --- a/Software/Gravity/UI.ino +++ b/Software/Gravity/UI.ino @@ -1,53 +1,13 @@ void updateScreen() { - display.clearDisplay(); - - //lastInteractionTime = millis(); //not sure if it's a right place for this, but should do for now - - //Tabs - display.drawRect(0, 48, 128, 1, SSD1306_WHITE); - display.setCursor(4, 52); - display.setTextSize(1); - - if (displayTab == 0) { - if (insideTab == true || shiftBtnPushed == true) { - display.drawRoundRect(0, 46, 24, 18, 3, SSD1306_WHITE); - display.setTextColor(SSD1306_WHITE); - } else { - display.fillRoundRect(0, 46, 24, 18, 3, SSD1306_WHITE); - display.setTextColor(SSD1306_BLACK); - } - display.print(F("BPM")); - } else { - display.setTextColor(SSD1306_WHITE); - display.print(F("BPM")); - } - - for (byte i = 1; i <= 6; i++) { - if (displayTab == i) { - if (insideTab == true || shiftBtnPushed == true) { - display.drawRoundRect(i*12 + 12, 46, 13, 18, 3, SSD1306_WHITE); - display.setTextColor(SSD1306_WHITE); - } else { - display.fillRoundRect(i*12 + 12, 46, 13, 18, 3, SSD1306_WHITE); - display.setTextColor(SSD1306_BLACK); - } - display.print(" "); - display.print(i); - } else { - display.setTextColor(SSD1306_WHITE); - display.print(" "); - display.print(i); - } - } - - display.drawRect(0, 46, 128, 2, SSD1306_BLACK); //to crop off parts of tabs round rect + u8g2.firstPage(); + do { + //u8g2.clearBuffer(); - //Submenu - if (insideTab) { - display.fillRoundRect(60, menuItem*12, 68, 10, 2, SSD1306_WHITE); - } + //BPM Tab if (displayTab == 0) { //BPM + u8g2.setFont(u8g2_font_5x7_tr); + //Menu items if (masterClockMode == 0 && bpmModulationRange == 0) { lastMenuItem = 1; } else if (masterClockMode == 0 && bpmModulationRange != 0) { @@ -56,31 +16,78 @@ void updateScreen() { lastMenuItem = 0; } if (menuItem == 0 && insideTab) { - display.setTextColor(SSD1306_BLACK); + u8g2.drawButtonUTF8(4, 8, U8G2_BTN_BW0|U8G2_BTN_INV, 20, 3, 2, "CLK:" ); } else { - display.setTextColor(SSD1306_WHITE); + u8g2.drawButtonUTF8(4, 8, U8G2_BTN_BW0, 20, 3, 2, "CLK:" ); } - display.setCursor(62, 1); - display.println(F("CLK:")); if (masterClockMode == 0) { if (menuItem == 1) { - display.setTextColor(SSD1306_BLACK); + u8g2.drawButtonUTF8(4, 20, U8G2_BTN_BW0|U8G2_BTN_INV, 20, 3, 2, "MOD:" ); } else { - display.setTextColor(SSD1306_WHITE); - } - display.setCursor(62, 13); - display.println(F("MOD:")); - if (menuItem == 2) { - display.setTextColor(SSD1306_BLACK); - } else { - display.setTextColor(SSD1306_WHITE); + u8g2.drawButtonUTF8(4, 20, U8G2_BTN_BW0, 20, 3, 2, "MOD:" ); } if (bpmModulationRange != 0) { - display.setCursor(62, 25); - display.println(F("RNG:")); + if (menuItem == 2) { + u8g2.drawButtonUTF8(4, 32, U8G2_BTN_BW0|U8G2_BTN_INV, 20, 3, 2, "RNG:" ); + } else { + u8g2.drawButtonUTF8(4, 32, U8G2_BTN_BW0, 20, 3, 2, "RNG:" ); + } } } - + //Values + if (menuItem == 0 && insideTab && masterClockMode == 0) { + u8g2.drawButtonUTF8(31, 8, U8G2_BTN_BW0|U8G2_BTN_INV, 30, 4, 2, "INT" ); + } else if ((menuItem != 0 || !insideTab) && masterClockMode == 0) { + u8g2.drawButtonUTF8(31, 8, U8G2_BTN_BW0, 30, 4, 2, "INT" ); + } + if (menuItem == 0 && masterClockMode == 1) { + u8g2.drawButtonUTF8(31, 8, U8G2_BTN_BW0|U8G2_BTN_INV, 30, 4, 2, "EXT" ); + } else if (menuItem != 0 && masterClockMode == 1) { + u8g2.drawButtonUTF8(31, 8, U8G2_BTN_BW0, 30, 4, 2, "EXT" ); + } + + if (masterClockMode == 0) { + if (menuItem == 1 && bpmModulationRange != 0 && bpmModulationChannel == 0) { + u8g2.drawButtonUTF8(31, 20, U8G2_BTN_BW0|U8G2_BTN_INV, 30, 4, 2, "CV1" ); + } else if (menuItem != 1 && bpmModulationRange != 0 && bpmModulationChannel == 0) { + u8g2.drawButtonUTF8(31, 20, U8G2_BTN_BW0, 30, 3, 2, "CV1" ); + } + if (menuItem == 1 && bpmModulationRange != 0 && bpmModulationChannel == 1) { + u8g2.drawButtonUTF8(31, 20, U8G2_BTN_BW0|U8G2_BTN_INV, 30, 4, 2, "CV2" ); + } else if (menuItem != 1 && bpmModulationRange != 0 && bpmModulationChannel == 1){ + u8g2.drawButtonUTF8(31, 20, U8G2_BTN_BW0, 30, 3, 2, "CV2" ); + } + if (menuItem == 1 && bpmModulationRange == 0) { + u8g2.drawButtonUTF8(31, 20, U8G2_BTN_BW0|U8G2_BTN_INV, 30, 4, 2, "OFF" ); + } else if (menuItem != 1 && bpmModulationRange == 0) { + u8g2.drawButtonUTF8(31, 20, U8G2_BTN_BW0, 30, 4, 2, "OFF" ); + } + String bpmModStr = String(bpmModulationRange * 10); + char bpmModChar[3]; + bpmModStr.toCharArray(bpmModChar, 3); + if (menuItem == 2 && bpmModulationRange != 0) { + u8g2.drawButtonUTF8(31, 32, U8G2_BTN_BW0|U8G2_BTN_INV, 30, 4, 2, bpmModChar ); + } else if (menuItem != 2 && bpmModulationRange != 0) { + u8g2.drawButtonUTF8(31, 32, U8G2_BTN_BW0, 30, 4, 2, bpmModChar ); + } + } + + String bpmStr = String(bpm); + char bpmChar[5]; + bpmStr.toCharArray(bpmChar, 5); + u8g2.setFont(u8g2_font_logisoso26_tn); + if (!insideTab && shiftBtnPushed) { + u8g2.drawButtonUTF8(96, 28, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, 62, 0, 0, bpmChar ); + u8g2.setFont(u8g2_font_7x13B_mr); + u8g2.drawButtonUTF8(96, 44, U8G2_BTN_BW1|U8G2_BTN_HCENTER, 62, 0, 0, "BPM" ); + } else if (menuItem != 2 && bpmModulationRange != 0) { + u8g2.drawButtonUTF8(96, 28, U8G2_BTN_BW0|U8G2_BTN_HCENTER, 64, 0, 0, bpmChar ); + u8g2.setFont(u8g2_font_7x13B_mr); + u8g2.drawButtonUTF8(96, 44, U8G2_BTN_BW0|U8G2_BTN_HCENTER, 64, 0, 0, "BPM" ); + } + + } + /* } else { //CHANNELS lastMenuItem = 3; if (menuItem == 0 && insideTab) { @@ -117,47 +124,9 @@ void updateScreen() { } display.setCursor(62, 37); display.println(F("CV2:")); - } + }*/ - //Submenu Values - if (displayTab == 0) { //BPM - if (menuItem == 0 && insideTab) { - display.setTextColor(SSD1306_BLACK); - } else { - display.setTextColor(SSD1306_WHITE); - } - display.setCursor(94, 1); - if (masterClockMode == 0) { - display.println(F("INT")); - } else if (masterClockMode == 1) { - display.println(F("EXT")); - } - if (masterClockMode == 0) { - if (menuItem == 1) { - display.setTextColor(SSD1306_BLACK); - } else { - display.setTextColor(SSD1306_WHITE); - } - display.setCursor(94, 13); - if (bpmModulationRange != 0 && bpmModulationChannel == 0) { - display.println(F("CV1")); - } else if (bpmModulationRange != 0 && bpmModulationChannel == 1) { - display.println(F("CV2")); - } else if (bpmModulationRange == 0) { - display.println(F("OFF")); - } - if (menuItem == 2) { - display.setTextColor(SSD1306_BLACK); - } else { - display.setTextColor(SSD1306_WHITE); - } - display.setCursor(94, 25); - if (bpmModulationRange != 0) { - display.println(bpmModulationRange * 10); - } - } - - } else { //CHANNELS + /*else { //CHANNELS if (menuItem == 0 && insideTab) { display.setTextColor(SSD1306_BLACK); } else { @@ -267,6 +236,35 @@ void updateScreen() { display.print(abs(subDivs[channels[displayTab - 1].subDiv])); } } + */ - display.display(); + //Tabs + u8g2.drawHLine(0, 51, 128); + u8g2.setFont(u8g2_font_5x7_tr); + + if (displayTab == 0) { + if (insideTab == true || shiftBtnPushed == true) { + u8g2.drawButtonUTF8(4, 60, U8G2_BTN_BW1, 0, 3, 2, "BPM" ); + } else { + u8g2.drawButtonUTF8(4, 60, U8G2_BTN_BW1|U8G2_BTN_INV, 0, 3, 2, "BPM" ); + } + } else { + u8g2.drawButtonUTF8(4, 60, U8G2_BTN_BW0, 0, 3, 2, "BPM" ); + } + + for (int i = 1; i <= 6; i++) { + if (displayTab == i) { + if (insideTab == true || shiftBtnPushed == true) { //hot mess, but for some reason it didn't want to take string/char variables + u8g2.drawButtonUTF8(i*13 + 13, 60, U8G2_BTN_BW1, 0, 3, 2, (i == 1) ? "1" : (i == 2) ? "2" : (i == 3) ? "3" : (i == 4) ? "4" : (i == 5) ? "5" : (i == 5) ? "5" : (i == 6) ? "6" : "0"); + } else { + u8g2.drawButtonUTF8(i*13 + 13, 60, U8G2_BTN_BW1|U8G2_BTN_INV, 0, 3, 2, (i == 1) ? "1" : (i == 2) ? "2" : (i == 3) ? "3" : (i == 4) ? "4" : (i == 5) ? "5" : (i == 5) ? "5" : (i == 6) ? "6" : "0"); + } + } else { + u8g2.drawButtonUTF8(i*13 + 13, 60, U8G2_BTN_BW0, 0, 3, 2, (i == 1) ? "1" : (i == 2) ? "2" : (i == 3) ? "3" : (i == 4) ? "4" : (i == 5) ? "5" : (i == 5) ? "5" : (i == 6) ? "6" : "0"); + } + } + + + //u8g2.sendBuffer(); + } while ( u8g2.nextPage() ); } \ No newline at end of file