Core features possibly done

This commit is contained in:
Aadi Desai 2022-03-25 17:16:43 +00:00
parent a9c40e69f0
commit 3c8c3def94
No known key found for this signature in database
GPG key ID: CFFFE425830EF4D9
3 changed files with 42 additions and 11 deletions

View file

@ -19,6 +19,7 @@ class Knob {
int getRotation(); int getRotation();
void updateRotation(bool ANew, bool BNew); void updateRotation(bool ANew, bool BNew);
void setRotation(int newRotation);
void changeLimitsVolume(int newMinimum, int newMaximum); void changeLimitsVolume(int newMinimum, int newMaximum);
}; };

View file

@ -14,6 +14,11 @@ int Knob::getRotation() {
return Knob::rotation; return Knob::rotation;
}; };
void Knob::setRotation(int newRotation) {
rotation = newRotation;
rotationInternal = newRotation;
};
void Knob::updateRotation(bool ANew, bool BNew) { void Knob::updateRotation(bool ANew, bool BNew) {
if (A == ANew && B == BNew) if (A == ANew && B == BNew)
return; // No change, do not update values return; // No change, do not update values
@ -75,11 +80,12 @@ void Knob::updateRotation(bool ANew, bool BNew) {
} }
void Knob::changeLimitsVolume(int newMinimum, int newMaximum) { void Knob::changeLimitsVolume(int newMinimum, int newMaximum) {
if(newMaximum>maximum){ if (newMaximum > maximum) {
rotation = rotation<<1; rotation = rotation << 1;
}else if(newMaximum<maximum){ } else if (newMaximum < maximum) {
rotation = rotation>>1; rotation = rotation >> 1;
}else{} } else {
minimum = newMinimum; }
maximum = newMaximum; minimum = newMinimum;
maximum = newMaximum;
}; };

View file

@ -182,7 +182,8 @@ void CAN_RX_ISR() {
uint8_t ISR_RX_Message[8]; uint8_t ISR_RX_Message[8];
uint32_t ISR_rxID; uint32_t ISR_rxID;
CAN_RX(ISR_rxID, ISR_RX_Message); CAN_RX(ISR_rxID, ISR_RX_Message);
xQueueSendFromISR(msgInQ, ISR_RX_Message, nullptr); if (isMainSynth)
xQueueSendFromISR(msgInQ, ISR_RX_Message, nullptr);
} }
// Task to update activeNotes[] and currentStepSize based on received CAN message // Task to update activeNotes[] and currentStepSize based on received CAN message
@ -193,12 +194,15 @@ void decodeTask(void *pvParameters) {
activeNotes[(RX_Message[1] - 1) * 12 + RX_Message[2]] = true; activeNotes[(RX_Message[1] - 1) * 12 + RX_Message[2]] = true;
latestKey = (RX_Message[1] - 1) * 12 + RX_Message[2]; latestKey = (RX_Message[1] - 1) * 12 + RX_Message[2];
currentStepSize = stepSizes[latestKey]; currentStepSize = stepSizes[latestKey];
} else { // Released } else if (RX_Message[0] == 0x52) { // Released
activeNotes[(RX_Message[1] - 1) * 12 + RX_Message[2]] = false; activeNotes[(RX_Message[1] - 1) * 12 + RX_Message[2]] = false;
if (latestKey == (RX_Message[1] - 1) * 12 + RX_Message[2]) { if (latestKey == (RX_Message[1] - 1) * 12 + RX_Message[2]) {
latestKey = 0; latestKey = 0;
currentStepSize = stepSizes[latestKey]; // Atomic Store currentStepSize = stepSizes[latestKey]; // Atomic Store
} }
} else if (RX_Message[0] == 0x4D) { // Main Synth Announce
isMainSynth = false;
K2.setRotation(1);
} }
} }
} }
@ -213,6 +217,17 @@ void keyChangedSendTXMessage(uint8_t octave, uint8_t key, bool pressed) {
} }
TX_Message[1] = octave; TX_Message[1] = octave;
TX_Message[2] = key; TX_Message[2] = key;
if (isMainSynth) {
xQueueSend(msgInQ, TX_Message, 0);
} else {
CAN_TX(canID, TX_Message);
}
}
//
void announceMainSynth() {
uint8_t TX_Message[8] = {0};
TX_Message[0] = 0x4D; // "M"
CAN_TX(canID, TX_Message); CAN_TX(canID, TX_Message);
} }
@ -240,6 +255,9 @@ void scanKeysTask(void *pvParameters) {
} }
} }
} }
if (keyArray[5] & 0x1 && isMainSynth) {
announceMainSynth();
}
if (volumeFiner) { if (volumeFiner) {
K3.changeLimitsVolume(0, 10); K3.changeLimitsVolume(0, 10);
} else { } else {
@ -294,12 +312,18 @@ void displayUpdateTask(void *pvParameters) {
// Print volume indicator above knob 3 // Print volume indicator above knob 3
if (!volumeFiner) { if (!volumeFiner) {
u8g2.drawXBM(116, 22, 13, 9, volumes[volume]); u8g2.drawXBM(112, 22, 13, 9, volumes[volume]);
} else { } else {
u8g2.setCursor(117, 30); u8g2.setCursor(117, 30);
u8g2.print(volume); u8g2.print(volume);
} }
if (!isMainSynth) {
u8g2.drawHLine(1, 6, 26);
u8g2.drawHLine(36, 26, 18);
u8g2.drawHLine(110, 26, 16);
}
u8g2.sendBuffer(); // transfer internal memory to the display u8g2.sendBuffer(); // transfer internal memory to the display
digitalToggle(LED_BUILTIN); // Toggle LED to show display update rate digitalToggle(LED_BUILTIN); // Toggle LED to show display update rate
} }
@ -340,7 +364,7 @@ void setup() {
#pragma endregion #pragma endregion
#pragma region CAN Setup #pragma region CAN Setup
msgInQ = xQueueCreate(36, 8); msgInQ = xQueueCreate(36, 8);
CAN_Init(true); CAN_Init(false);
setCANFilter(0x123, 0x7ff); setCANFilter(0x123, 0x7ff);
CAN_RegisterRX_ISR(CAN_RX_ISR); CAN_RegisterRX_ISR(CAN_RX_ISR);
CAN_Start(); CAN_Start();