From c425de4fa5887e2d6d1f6320bea482bc04b16788 Mon Sep 17 00:00:00 2001 From: Kacper Date: Thu, 24 Mar 2022 22:18:18 +0000 Subject: [PATCH] Completed merge --- lib/knob/knob | 2 ++ lib/knob/knob.cpp | 26 +++++++++++++++-- src/knob.cpp | 64 ----------------------------------------- src/knob.h | 22 -------------- src/main.cpp | 73 ++++++++++++++++++++++++----------------------- 5 files changed, 62 insertions(+), 125 deletions(-) delete mode 100644 src/knob.cpp delete mode 100644 src/knob.h diff --git a/lib/knob/knob b/lib/knob/knob index 9c035a1..48fd263 100644 --- a/lib/knob/knob +++ b/lib/knob/knob @@ -10,10 +10,12 @@ class Knob { public: Knob(int minimum, int max); + Knob(int minimum, int max, int initialRotation); int getRotation(); void updateRotation(bool ANew, bool BNew); + void changeLimitsVolume(int newMinimum, int newMaximum); }; #endif \ No newline at end of file diff --git a/lib/knob/knob.cpp b/lib/knob/knob.cpp index 25bf475..b15c03a 100644 --- a/lib/knob/knob.cpp +++ b/lib/knob/knob.cpp @@ -10,6 +10,16 @@ Knob::Knob(int minimum, int maximum) { Knob::rotation = 0; } +Knob::Knob(int minimum, int maximum, int initialRotation) { + Knob::minimum = minimum; + Knob::maximum = maximum; + Knob::A = false; + Knob::B = false; + Knob::rotPlusOnePrev = false; + Knob::rotMinOnePrev = false; + Knob::rotation = initialRotation; +} + int Knob::getRotation() { return Knob::rotation; }; @@ -31,9 +41,9 @@ void Knob::updateRotation(bool ANew, bool BNew) { (B && A && !BNew && !ANew); if (rotPlusOneNew || (impossibleState && rotPlusOnePrev)) - rotation += 2; + rotation += 1; if (rotMinOneNew || (impossibleState && rotMinOnePrev)) - rotation -= 2; + rotation -= 1; if (rotation < minimum) rotation = minimum; if (rotation > maximum) @@ -45,4 +55,14 @@ void Knob::updateRotation(bool ANew, bool BNew) { rotPlusOnePrev = rotPlusOneNew; rotMinOnePrev = rotMinOneNew; } -} \ No newline at end of file +} + +void Knob::changeLimitsVolume(int newMinimum, int newMaximum) { + if(newMaximum>maximum){ + rotation = rotation<<1; + }else if(newMaximum>1; + }else{} + minimum = newMinimum; + maximum = newMaximum; +}; \ No newline at end of file diff --git a/src/knob.cpp b/src/knob.cpp deleted file mode 100644 index f588024..0000000 --- a/src/knob.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "knob.h" - -Knob::Knob(int minimum, int maximum) { - Knob::minimum = minimum; - Knob::maximum = maximum; - Knob::A = false; - Knob::B = false; - Knob::rotPlusOnePrev = false; - Knob::rotMinOnePrev = false; - Knob::rotation = 0; -} - -Knob::Knob(int minimum, int maximum, int initialRotation) { - Knob::minimum = minimum; - Knob::maximum = maximum; - Knob::A = false; - Knob::B = false; - Knob::rotPlusOnePrev = false; - Knob::rotMinOnePrev = false; - Knob::rotation = initialRotation; -} - -int Knob::getRotation() { - return Knob::rotation; -}; - -void Knob::updateRotation(bool ANew, bool BNew) { - bool rotPlusOneNew = (!B && !A && !BNew && ANew) || - (!B && A && BNew && ANew) || - (B && !A && !BNew && !ANew) || - (B && A && BNew && !ANew); - - bool rotMinOneNew = (!B && !A && BNew && !ANew) || - (!B && A && !BNew && !ANew) || - (B && !A && BNew && ANew) || - (B && A && !BNew && ANew); - - bool impossibleState = (!B && !A && BNew && ANew) || - (!B && A && BNew && !ANew) || - (B && !A && !BNew && ANew) || - (B && A && !BNew && !ANew); - - if (rotPlusOneNew || (impossibleState && rotPlusOnePrev)) rotation += 1; - if (rotMinOneNew || (impossibleState && rotMinOnePrev)) rotation -= 1; - if (rotation < minimum) rotation = minimum; - if (rotation > maximum) rotation = maximum; - - A = ANew; - B = BNew; - if (!impossibleState) { - rotPlusOnePrev = rotPlusOneNew; - rotMinOnePrev = rotMinOneNew; - } -}; - -void Knob::changeLimitsVolume(int newMinimum, int newMaximum) { - if(newMaximum>maximum){ - rotation = rotation<<1; - }else if(newMaximum>1; - }else{} - minimum = newMinimum; - maximum = newMaximum; -}; \ No newline at end of file diff --git a/src/knob.h b/src/knob.h deleted file mode 100644 index 5b53d82..0000000 --- a/src/knob.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef KNOB_H -#define KNOB_H - -class Knob { -private: - int rotation; - int minimum, maximum; - bool A, B; - bool rotPlusOnePrev, rotMinOnePrev; - -public: - Knob(int minimum, int max); - Knob(int minimum, int max, int initialRotation); - - int getRotation(); - - void updateRotation(bool ANew, bool BNew); - - void changeLimitsVolume(int newMinimum, int newMaximum); -}; - -#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 673c9b0..bf0c762 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ const uint32_t canID = 0x123; // Variables std::atomic currentStepSize; std::atomic keyArray[7]; -std::atomic octave = 4; // Octave to start on +std::atomic octave; std::atomic volume; std::atomic volumeFiner; std::atomic wave; @@ -170,35 +170,35 @@ void sampleISR(){ analogWrite(OUTR_PIN, Vout + 128); } -void CAN_RX_ISR() { - uint8_t ISR_RX_Message[8]; - uint32_t ISR_rxID; - CAN_RX(ISR_rxID, ISR_RX_Message); - xQueueSendFromISR(msgInQ, ISR_RX_Message, nullptr); -} +// void CAN_RX_ISR() { +// uint8_t ISR_RX_Message[8]; +// uint32_t ISR_rxID; +// CAN_RX(ISR_rxID, ISR_RX_Message); +// xQueueSendFromISR(msgInQ, ISR_RX_Message, nullptr); +// } -void decodeTask(void *pvParameters) { - while (1) { - xQueueReceive(msgInQ, RX_Message, portMAX_DELAY); - if (RX_Message[0] == 0x50) { // Pressed - currentStepSize = notes[(RX_Message[1] - 1) * 12 + RX_Message[2]].stepSize; - } else { // Released - currentStepSize = 0; - } - } -} +// void decodeTask(void *pvParameters) { +// while (1) { +// xQueueReceive(msgInQ, RX_Message, portMAX_DELAY); +// if (RX_Message[0] == 0x50) { // Pressed +// currentStepSize = notes[(RX_Message[1] - 1) * 12 + RX_Message[2]].stepSize; +// } else { // Released +// currentStepSize = 0; +// } +// } +// } -void keyChangedSendTXMessage(uint8_t octave, uint8_t key, bool pressed) { - uint8_t TX_Message[8] = {0}; - if (pressed) { - TX_Message[0] = 0x50; // "P" - } else { - TX_Message[0] = 0x52; // "R" - } - TX_Message[1] = octave; - TX_Message[2] = key; - CAN_TX(canID, TX_Message); -} +// void keyChangedSendTXMessage(uint8_t octave, uint8_t key, bool pressed) { +// uint8_t TX_Message[8] = {0}; +// if (pressed) { +// TX_Message[0] = 0x50; // "P" +// } else { +// TX_Message[0] = 0x52; // "R" +// } +// TX_Message[1] = octave; +// TX_Message[2] = key; +// CAN_TX(canID, TX_Message); +// } // Task to update keyArray values at a higher priority void scanKeysTask(void *pvParameters) { @@ -217,7 +217,7 @@ void scanKeysTask(void *pvParameters) { keyArray[i] = newRow; for (uint8_t j = 0; j < 4; j++) { if ((oldRow & (0x1 << j)) ^ (newRow & (0x1 << j))) { - keyChangedSendTXMessage(octave, i * 4 + j + 1, newRow & (0x1 << j)); + //keyChangedSendTXMessage(octave, i * 4 + j + 1, newRow & (0x1 << j)); } } } @@ -303,6 +303,7 @@ void displayUpdateTask(void *pvParameters) { } void setup() { + octave = 4; #pragma region Pin Setup pinMode(RA0_PIN, OUTPUT); pinMode(RA1_PIN, OUTPUT); @@ -330,13 +331,13 @@ void setup() { Serial.begin(115200); Serial.println("Hello World"); #pragma endregion -#pragma region CAN Setup - msgInQ = xQueueCreate(36, 8); - CAN_Init(true); - setCANFilter(0x123, 0x7ff); - CAN_RegisterRX_ISR(CAN_RX_ISR); - CAN_Start(); -#pragma endregion +// #pragma region CAN Setup +// msgInQ = xQueueCreate(36, 8); +// CAN_Init(true); +// setCANFilter(0x123, 0x7ff); +// CAN_RegisterRX_ISR(CAN_RX_ISR); +// CAN_Start(); +// #pragma endregion #pragma region Task Scheduler Setup TIM_TypeDef *Instance = TIM1; HardwareTimer *sampleTimer = new HardwareTimer(Instance);