More memory optimisation. Changed how version is displayed in settings

This commit is contained in:
Oleksiy
2024-07-31 19:07:16 +03:00
parent b244049db5
commit 01806cbd82
2 changed files with 27 additions and 16 deletions

View File

@ -6,16 +6,17 @@
#include <avr/wdt.h> #include <avr/wdt.h>
#include <NeoHWSerial.h> #include <NeoHWSerial.h>
//const char version[5] = "1.1.1"; #define VERSION "V:1.1.1"
String version = "1.1.1";
#define SCREEN_ADDRESS 0x3C byte memCode = 'D'; //Change to different letter if you changed the data structure
#define PPQN 24 #define PPQN 24
#define PULSE_LENGTH 12 //ms (with 12 ms you can't get higher than 208bpm) #define PULSE_LENGTH 12 //ms (with 12 ms you can't get higher than 208bpm)
#define MAXBPM 200 //250 at 24ppqn with 5ms pulse will be 50/50 square wave #define MAXBPM 200 //250 at 24ppqn with 5ms pulse will be 50/50 square wave
#define MINBPM 20 #define MINBPM 20
#define SCREEN_ADDRESS 0x3C
// Rev 2+ Config // Rev 2+ Config
#define ENC_BTN_PIN 14 #define ENC_BTN_PIN 14
#define ENC_D1_PIN 17 #define ENC_D1_PIN 17
@ -99,7 +100,6 @@ byte currentStep = 0;
byte stepNumSelected = 0; byte stepNumSelected = 0;
bool *patternToEdit; bool *patternToEdit;
byte memCode = 'C'; //Change to different letter if you changed the data structure
unsigned int channelPulseCount[6]; unsigned int channelPulseCount[6];
unsigned int channelPulsesPerCycle[6]; unsigned int channelPulsesPerCycle[6];
@ -191,8 +191,11 @@ const PROGMEM uint8_t stkL[569] U8G2_FONT_SECTION("stk-l") =
"\210\14\21RC\206\241\63h\222(I\203\346\220\15\31E\204\14!\42\303F\20;h\341\0x\24\312" "\210\14\21RC\206\241\63h\222(I\203\346\220\15\31E\204\14!\42\303F\20;h\341\0x\24\312"
"\336\302 CGH\240\61E\312\14\222)\6Y\64\0\0\0\0\4\377\377\0"; "\336\302 CGH\240\61E\312\14\222)\6Y\64\0\0\0\0\4\377\377\0";
String version;
void setup() { void setup() {
version = F(VERSION);
NeoSerial.begin(31250); NeoSerial.begin(31250);
NeoSerial.attachInterrupt(receiveMIDI); NeoSerial.attachInterrupt(receiveMIDI);

View File

@ -149,7 +149,7 @@ void updateScreen() {
} else if (i == 1 && channels[displayTab - 1].mode == 2) { } else if (i == 1 && channels[displayTab - 1].mode == 2) {
valueStr = F("SEQ"); valueStr = F("SEQ");
} else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset } else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset
valueStr = String(channels[displayTab - 1].offset) + "/"; valueStr = String(channels[displayTab - 1].offset) + F("/");
int PulsesPerStep; int PulsesPerStep;
if (subDivs[channels[displayTab - 1].subDiv] < 0) { if (subDivs[channels[displayTab - 1].subDiv] < 0) {
PulsesPerStep = PPQN / subDivs[channels[displayTab - 1].subDiv] * -1 ; PulsesPerStep = PPQN / subDivs[channels[displayTab - 1].subDiv] * -1 ;
@ -158,9 +158,11 @@ void updateScreen() {
} }
valueStr = valueStr + String(PulsesPerStep); //(playingModes[i] * PPQN) - 1 //String(channelPulsesPerCycle[displayTab-1]+1) valueStr = valueStr + String(PulsesPerStep); //(playingModes[i] * PPQN) - 1 //String(channelPulsesPerCycle[displayTab-1]+1)
} else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] > 0) { } else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] > 0) {
valueStr = "/" + String(subDivs[channels[displayTab - 1].subDiv]); valueStr = F("/");
valueStr = valueStr + String(subDivs[channels[displayTab - 1].subDiv]);
} else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] < 0) { } else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] < 0) {
valueStr = "x" + String(abs(subDivs[channels[displayTab - 1].subDiv])); valueStr = F("x");
valueStr = valueStr + String(abs(subDivs[channels[displayTab - 1].subDiv]));
} else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 0) { //MOD } else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 0) { //MOD
valueStr = F("OFF"); valueStr = F("OFF");
} else if (i == 3 && channels[displayTab - 1].CV1Target != 0 && channels[displayTab - 1].CV2Target == 0) { } else if (i == 3 && channels[displayTab - 1].CV1Target != 0 && channels[displayTab - 1].CV2Target == 0) {
@ -202,17 +204,20 @@ void updateScreen() {
if (channels[displayTab - 1].mode == 0) { if (channels[displayTab - 1].mode == 0) {
if (subDivs[channels[displayTab - 1].subDiv] > 0) { if (subDivs[channels[displayTab - 1].subDiv] > 0) {
valueStr = "/" + String(subDivs[channels[displayTab - 1].subDiv]); valueStr = F("/");
} else { } else {
valueStr = "x" + String(abs(subDivs[channels[displayTab - 1].subDiv])); valueStr = F("x");
} }
valueStr = valueStr + String(abs(subDivs[channels[displayTab - 1].subDiv]));
} else if (channels[displayTab - 1].mode == 1) { } else if (channels[displayTab - 1].mode == 1) {
valueStr = String(channels[displayTab - 1].random) + "0%"; valueStr = String(channels[displayTab - 1].random) + "0%";
} else if (channels[displayTab - 1].mode == 2) { } else if (channels[displayTab - 1].mode == 2) {
if (channels[displayTab - 1].seqPattern < 8) { if (channels[displayTab - 1].seqPattern < 8) {
valueStr = "A" + String(channels[displayTab - 1].seqPattern + 1); valueStr = F("A");
valueStr = valueStr + String(channels[displayTab - 1].seqPattern + 1);
} else { } else {
valueStr = "B" + String(channels[displayTab - 1].seqPattern - 7); valueStr = F("B");
valueStr = valueStr + String(channels[displayTab - 1].seqPattern - 7);
} }
} }
u8g2.setFont(stkL); u8g2.setFont(stkL);
@ -267,9 +272,11 @@ void updateScreen() {
u8g2.setFont(velvetscreen); u8g2.setFont(velvetscreen);
byte pattern = channels[displayTab - 1].seqPattern; byte pattern = channels[displayTab - 1].seqPattern;
if (pattern < 8) { if (pattern < 8) {
valueStr = "PATTERN A" + String(pattern + 1); valueStr = F("PATTERN A");
valueStr = valueStr + String(pattern + 1);
} else { } else {
valueStr = "PATTERN B" + String(pattern - 7); valueStr = F("PATTERN B");
valueStr = valueStr + String(pattern - 7);
} }
u8g2.drawButtonUTF8(64, 5, U8G2_BTN_BW1|U8G2_BTN_HCENTER, 128, 0, 2, valueStr.c_str() ); u8g2.drawButtonUTF8(64, 5, U8G2_BTN_BW1|U8G2_BTN_HCENTER, 128, 0, 2, valueStr.c_str() );
for (byte i = 0; i < 8; i++) { for (byte i = 0; i < 8; i++) {
@ -304,22 +311,23 @@ void updateScreen() {
else if (displayScreen == 2) { else if (displayScreen == 2) {
valueStr = F("SETTINGS"); valueStr = F("SETTINGS");
u8g2.drawStr(8, 5, valueStr.c_str() ); u8g2.drawStr(8, 5, valueStr.c_str() );
u8g2.drawStr(102, 5, version.c_str() ); u8g2.drawStr(122 - (u8g2.getStrWidth(version.c_str())), 5, version.c_str() );
u8g2.drawHLine(0, 8, 128); u8g2.drawHLine(0, 8, 128);
lastMenuItem = 3; lastMenuItem = 3;
byte width = 112; byte width = 112;
for (byte i = 0; i <= lastMenuItem; i++) { for (byte i = 0; i <= lastMenuItem; i++) {
switch(i) { switch(i) {
case 0: case 0:
valueStr = F("CALIBRATE CV"); valueStr = F("CALIBRATE CV INS");
break; break;
case 1: case 1:
valueStr = F("ROTATE SCREEN"); valueStr = F("ROTATE SCREEN");
break; break;
case 2: case 2:
valueStr = F("REVERSE ENCODER"); valueStr = F("REVERSE ENCODER");
break;
case 3: case 3:
valueStr = F("FULL RESET"); valueStr = F("FACTORY RESET");
break; break;
}; };
if (menuItem == i) { if (menuItem == i) {