Added "Factory Reset"
This commit is contained in:
@ -3,6 +3,7 @@
|
|||||||
#include <FlexiTimer2.h>
|
#include <FlexiTimer2.h>
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
#include <U8g2lib.h>
|
#include <U8g2lib.h>
|
||||||
|
#include <avr/wdt.h>
|
||||||
|
|
||||||
#define VERSION "0.9b"
|
#define VERSION "0.9b"
|
||||||
|
|
||||||
@ -141,7 +142,7 @@ const uint8_t velvetscreen[437] U8G2_FONT_SECTION("velvetscreen") =
|
|||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
//Serial.begin(9600);
|
||||||
|
|
||||||
pinMode(ENC_BTN_PIN, INPUT_PULLUP);
|
pinMode(ENC_BTN_PIN, INPUT_PULLUP);
|
||||||
pinMode(START_STOP_BTN_PIN, INPUT_PULLUP);
|
pinMode(START_STOP_BTN_PIN, INPUT_PULLUP);
|
||||||
@ -153,78 +154,15 @@ void setup() {
|
|||||||
pinMode(outsPins[i], OUTPUT);
|
pinMode(outsPins[i], OUTPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
//check last bit in eeprom to know if the correct settings were stored
|
loadState();
|
||||||
if (EEPROM.read(1023) == memCode) {
|
|
||||||
int addr = 0;
|
|
||||||
EEPROM.get(addr, bpm);
|
|
||||||
addr = addr + sizeof(bpm);
|
|
||||||
EEPROM.get(addr, bpmModulationChannel);
|
|
||||||
addr = addr + sizeof(bpmModulationChannel);
|
|
||||||
EEPROM.get(addr, bpmModulationRange);
|
|
||||||
addr = addr + sizeof(bpmModulationRange);
|
|
||||||
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);
|
|
||||||
addr = addr + sizeof(seqB8);
|
|
||||||
EEPROM.get(addr, CV1Calibration);
|
|
||||||
addr = addr + sizeof(CV1Calibration);
|
|
||||||
EEPROM.get(addr, CV2Calibration);
|
|
||||||
addr = addr + sizeof(CV2Calibration);
|
|
||||||
EEPROM.get(addr, rotateScreen);
|
|
||||||
} else {
|
|
||||||
//calibrateCVs();
|
|
||||||
saveState();
|
|
||||||
EEPROM.write(1023, memCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
//calibrateCVs(); //Just for the testing
|
|
||||||
|
|
||||||
u8g2.begin();
|
u8g2.begin();
|
||||||
|
checkScreenRotation();
|
||||||
if (rotateScreen) {
|
|
||||||
u8g2.setDisplayRotation(U8G2_R0);
|
|
||||||
} else {
|
|
||||||
u8g2.setDisplayRotation(U8G2_R2);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateScreen();
|
updateScreen();
|
||||||
|
|
||||||
calculateCycles();
|
calculateCycles();
|
||||||
calculateBPMTiming();
|
calculateBPMTiming();
|
||||||
|
|
||||||
displayScreen = 0;
|
|
||||||
|
|
||||||
FlexiTimer2::set(1, 1.0 / 1000, clock); // 1.0/1000 = 1ms period. If other than 1ms calculateBPMTiming() might need tweaking
|
FlexiTimer2::set(1, 1.0 / 1000, clock); // 1.0/1000 = 1ms period. If other than 1ms calculateBPMTiming() might need tweaking
|
||||||
FlexiTimer2::start();
|
FlexiTimer2::start();
|
||||||
}
|
}
|
||||||
@ -233,8 +171,6 @@ void loop() {
|
|||||||
checkInputs();
|
checkInputs();
|
||||||
}
|
}
|
||||||
|
|
||||||
//void reset() { asm volatile ("jmp 0x7800"); }
|
|
||||||
|
|
||||||
void clock() {
|
void clock() {
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
|
|
||||||
@ -514,7 +450,78 @@ void saveState() {
|
|||||||
EEPROM.put(addr, rotateScreen);
|
EEPROM.put(addr, rotateScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loadState() {
|
||||||
|
//check last bit in eeprom to know if the correct settings were stored
|
||||||
|
if (EEPROM.read(1023) == memCode) {
|
||||||
|
int addr = 0;
|
||||||
|
EEPROM.get(addr, bpm);
|
||||||
|
addr = addr + sizeof(bpm);
|
||||||
|
EEPROM.get(addr, bpmModulationChannel);
|
||||||
|
addr = addr + sizeof(bpmModulationChannel);
|
||||||
|
EEPROM.get(addr, bpmModulationRange);
|
||||||
|
addr = addr + sizeof(bpmModulationRange);
|
||||||
|
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);
|
||||||
|
addr = addr + sizeof(seqB8);
|
||||||
|
EEPROM.get(addr, CV1Calibration);
|
||||||
|
addr = addr + sizeof(CV1Calibration);
|
||||||
|
EEPROM.get(addr, CV2Calibration);
|
||||||
|
addr = addr + sizeof(CV2Calibration);
|
||||||
|
EEPROM.get(addr, rotateScreen);
|
||||||
|
} else {
|
||||||
|
//calibrateCVs();
|
||||||
|
saveState();
|
||||||
|
EEPROM.write(1023, memCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetFunc() {
|
||||||
|
wdt_enable(WDTO_15MS); // 8 ms watchdog
|
||||||
|
while(true); // infinite loop without feeding the dog, should reset in 8ms
|
||||||
|
}
|
||||||
|
|
||||||
void calibrateCVs() {
|
void calibrateCVs() {
|
||||||
CV1Calibration = 511 - analogRead(ANALOGUE_INPUT_1_PIN);
|
CV1Calibration = 511 - analogRead(ANALOGUE_INPUT_1_PIN);
|
||||||
CV2Calibration = 511 - analogRead(ANALOGUE_INPUT_2_PIN);
|
CV2Calibration = 511 - analogRead(ANALOGUE_INPUT_2_PIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void checkScreenRotation() {
|
||||||
|
if (rotateScreen) {
|
||||||
|
u8g2.setDisplayRotation(U8G2_R0);
|
||||||
|
} else {
|
||||||
|
u8g2.setDisplayRotation(U8G2_R2);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -57,11 +57,12 @@ void checkInputs() {
|
|||||||
} else if (displayScreen == 2 && menuItem == 1) {
|
} else if (displayScreen == 2 && menuItem == 1) {
|
||||||
rotateScreen = !rotateScreen;
|
rotateScreen = !rotateScreen;
|
||||||
saveState();
|
saveState();
|
||||||
setup();
|
checkScreenRotation();
|
||||||
|
//setup();
|
||||||
|
//resetFunc();
|
||||||
} else if (displayScreen == 2 && menuItem == 2) {
|
} else if (displayScreen == 2 && menuItem == 2) {
|
||||||
EEPROM.put(1023, memCode - 1);
|
EEPROM.put(1023, memCode - 1);
|
||||||
//delay(500);
|
resetFunc();
|
||||||
//setup();
|
|
||||||
}
|
}
|
||||||
updateScreen();
|
updateScreen();
|
||||||
} else if (encReleasedTime - encPressedTime < 2000) { // longer press (<2s) is for navigating back. longer than 2s presses are ignored
|
} else if (encReleasedTime - encPressedTime < 2000) { // longer press (<2s) is for navigating back. longer than 2s presses are ignored
|
||||||
|
|||||||
Reference in New Issue
Block a user