From 0471b8cc8927b6712ca570e5916dbdae64650eb3 Mon Sep 17 00:00:00 2001 From: DashyFox Date: Thu, 16 Jan 2025 16:58:33 +0300 Subject: [PATCH 1/4] begin() --- IR_Encoder.cpp | 19 +++++++++++++++++++ IR_Encoder.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/IR_Encoder.cpp b/IR_Encoder.cpp index 3dda9fb..f988ee4 100644 --- a/IR_Encoder.cpp +++ b/IR_Encoder.cpp @@ -37,6 +37,25 @@ IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair, bool } }; + +void WEAK EncoderISR() +{ + IR_Encoder::isr(); +} + +HardwareTimer IR_Encoder::IR_Timer; + +inline HardwareTimer* IR_Encoder::get_IR_Timer(){return &IR_Encoder::IR_Timer;} + +void IR_Encoder::begin(HardwareTimer timer, uint8_t channel, IRQn_Type IRQn){ + IR_Timer = timer; + IR_Timer.setOverflow(carrierFrec * 2, HERTZ_FORMAT); + IR_Timer.attachInterrupt(channel, EncoderISR); + NVIC_SetPriority(IRQn, 0); + IR_Timer.resume(); +} + + void IR_Encoder::enable() { auto &enc_list = get_enc_list(); diff --git a/IR_Encoder.h b/IR_Encoder.h index 0aaec2c..0540fae 100644 --- a/IR_Encoder.h +++ b/IR_Encoder.h @@ -9,6 +9,7 @@ class IR_Encoder : public IR_FOX friend IR_DecoderRaw; public: + static HardwareTimer IR_Timer; private: // uint16_t id; /// @brief Адрес передатчика public: @@ -18,6 +19,8 @@ public: /// @param decPair Приёмник, для которого отключается приём в момент передачи передатчиком IR_Encoder(uint8_t pin, uint16_t addr = 0, IR_DecoderRaw *decPair = nullptr, bool autoHandle = true); static void isr(); + static void begin(HardwareTimer IR_Timer, uint8_t channel, IRQn_Type IRQn); + static HardwareTimer* get_IR_Timer(); void enable(); void disable(); From 79bb804bb424d1fb3927ac0f890b3dca57a302be Mon Sep 17 00:00:00 2001 From: DashyFox Date: Thu, 16 Jan 2025 16:58:38 +0300 Subject: [PATCH 2/4] Update IR-protocol.ino --- IR-protocol.ino | 94 ++++++++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/IR-protocol.ino b/IR-protocol.ino index 56005d9..1e9bb6b 100644 --- a/IR-protocol.ino +++ b/IR-protocol.ino @@ -4,14 +4,14 @@ #include "MemoryCheck.h" /////////////// Pinout /////////////// -#define dec0_PIN PIN_KT1_IN -#define dec1_PIN PIN_KT2_IN -#define dec2_PIN PIN_KT3_IN -#define dec3_PIN PIN_KT4_IN -#define dec4_PIN PIN_KT5_IN -#define dec5_PIN PIN_KT6_IN -#define dec6_PIN PIN_KT7_IN -#define dec7_PIN PIN_KT8_IN +#define dec0_PIN PIN_IR_DEC_FORWARD +// #define dec1_PIN PIN_KT2_IN +// #define dec2_PIN PIN_KT3_IN +// #define dec3_PIN PIN_KT4_IN +// #define dec4_PIN PIN_KT5_IN +// #define dec5_PIN PIN_KT6_IN +// #define dec6_PIN PIN_KT7_IN +// #define dec7_PIN PIN_KT8_IN // #define dec8_PIN PB8 // #define dec9_PIN PB9 // #define dec10_PIN PB10 @@ -43,7 +43,7 @@ //////////////// Var ///////////////// // IR_Encoder encForward(PA5, 42 /* , &decBackward */); -IR_Encoder enc0(PIN_KT8_OUT, 42 /* , &decBackward */); +IR_Encoder enc0(PIN_IR_ENC_FORWARD, 42 /* , &decBackward */); // IR_Encoder enc1(PA1, 127 /* , &decBackward */); // IR_Encoder enc2(PA2, 137 /* , &decBackward */); // IR_Encoder enc3(PA3, 777 /* , &decBackward */); @@ -59,18 +59,19 @@ IR_Encoder enc0(PIN_KT8_OUT, 42 /* , &decBackward */); void EncoderISR() { IR_Encoder::isr(); + digitalToggle(PIN_LED_BACKWARD); } //------------------------------------------------------------------- dec_Ini(0); -dec_Ini(1); -dec_Ini(2); -dec_Ini(3); -dec_Ini(4); -dec_Ini(5); -dec_Ini(6); -dec_Ini(7); +// dec_Ini(1); +// dec_Ini(2); +// dec_Ini(3); +// dec_Ini(4); +// dec_Ini(5); +// dec_Ini(6); +// dec_Ini(7); // dec_Ini(8); // dec_Ini(9); // dec_Ini(10); @@ -181,8 +182,8 @@ Timer t1(500, millis, []() // encBackward.sendData(IR_Broadcast, data2); // encTree.sendData(IR_Broadcast, rawData3); }); -// Timer t2(50, millis, []() -// { digitalToggle(LED_BUILTIN); }); +Timer t2(50, millis, []() + { digitalToggle(PIN_LED_SPECIAL_1); }); Timer signalDetectTimer; ///////////////////////////////////////////////////////////////////// @@ -197,10 +198,17 @@ void setup() NVIC_SetPriority(IRQn_Type::TIM3_IRQn, 0); IR_Timer.resume(); + pinMode(PIN_IR_DEC_FORWARD, INPUT_PULLUP); + pinMode(PIN_LED_BACKWARD, OUTPUT); + pinMode(PIN_LED_FORWARD, OUTPUT); + + pinMode(PIN_LED_SPECIAL_1, OUTPUT); // test + pinMode(PIN_LED_SPECIAL_2, OUTPUT); // test + Serial.begin(SERIAL_SPEED); Serial.println(F(INFO)); - pinMode(LoopOut, OUTPUT); + // pinMode(LoopOut, OUTPUT); // pinMode(SignalDetectLed, OUTPUT); pinMode(dec0_PIN, INPUT_PULLUP); @@ -208,13 +216,13 @@ void setup() static IR_DecoderRaw *blind[]{ &dec0, - &dec1, - &dec2, - &dec3, - &dec4, - &dec5, - &dec6, - &dec7, + // &dec1, + // &dec2, + // &dec3, + // &dec4, + // &dec5, + // &dec6, + // &dec7, // &dec8, // &dec9, // &dec10, @@ -230,13 +238,13 @@ void setup() // enc10.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); decSetup(0); - decSetup(1); - decSetup(2); - decSetup(3); - decSetup(4); - decSetup(5); - decSetup(6); - decSetup(7); + // decSetup(1); + // decSetup(2); + // decSetup(3); + // decSetup(4); + // decSetup(5); + // decSetup(6); + // decSetup(7); // decSetup(8); // decSetup(9); // decSetup(10); @@ -247,20 +255,21 @@ void setup() void loop() { - digitalToggle(LoopOut); + // digitalToggle(LoopOut); + digitalWrite(PIN_LED_SPECIAL_2, digitalRead(PIN_IR_DEC_FORWARD)); Timer::tick(); IR_Decoder::tick(); bool rx_flag; decStat(0); - decStat(1); - decStat(2); - decStat(3); - decStat(4); - decStat(5); - decStat(6); - decStat(7); + // decStat(1); + // decStat(2); + // decStat(3); + // decStat(4); + // decStat(5); + // decStat(6); + // decStat(7); // decStat(8); // decStat(9); // decStat(10); @@ -318,6 +327,9 @@ void detectSignal() // digitalWrite(SignalDetectLed, HIGH); // signalDetectTimer.delay(50, millis, []() // { digitalWrite(SignalDetectLed, LOW); }); + + digitalToggle(PIN_LED_FORWARD); + } // test From b6b9d2c82093930d605c4bdcc594910146dcaa91 Mon Sep 17 00:00:00 2001 From: DashyFox Date: Thu, 16 Jan 2025 17:51:21 +0300 Subject: [PATCH 3/4] enable/disable fix --- IR_Decoder.cpp | 2 ++ IR_Encoder.cpp | 12 ++++-------- IR_config.cpp | 1 - 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/IR_Decoder.cpp b/IR_Decoder.cpp index 63d4d7a..a8d5035 100644 --- a/IR_Decoder.cpp +++ b/IR_Decoder.cpp @@ -23,12 +23,14 @@ void IR_Decoder::enable() { dec_list.push_back(this); } + pinMode(pin, INPUT_PULLUP); attachInterrupt(pin, (*this)(), CHANGE); } void IR_Decoder::disable() { detachInterrupt(pin); + pinMode(pin, INPUT); auto &dec_list = get_dec_list(); auto it = std::find(dec_list.begin(), dec_list.end(), this); if (it != dec_list.end()) diff --git a/IR_Encoder.cpp b/IR_Encoder.cpp index f988ee4..11af94e 100644 --- a/IR_Encoder.cpp +++ b/IR_Encoder.cpp @@ -29,7 +29,6 @@ IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair, bool { decPair->encoder = this; } - pinMode(pin, OUTPUT); if (autoHandle) { @@ -37,12 +36,6 @@ IR_Encoder::IR_Encoder(uint8_t pin, uint16_t addr, IR_DecoderRaw *decPair, bool } }; - -void WEAK EncoderISR() -{ - IR_Encoder::isr(); -} - HardwareTimer IR_Encoder::IR_Timer; inline HardwareTimer* IR_Encoder::get_IR_Timer(){return &IR_Encoder::IR_Timer;} @@ -50,7 +43,7 @@ inline HardwareTimer* IR_Encoder::get_IR_Timer(){return &IR_Encoder::IR_Timer;} void IR_Encoder::begin(HardwareTimer timer, uint8_t channel, IRQn_Type IRQn){ IR_Timer = timer; IR_Timer.setOverflow(carrierFrec * 2, HERTZ_FORMAT); - IR_Timer.attachInterrupt(channel, EncoderISR); + IR_Timer.attachInterrupt(channel, IR_Encoder::isr); NVIC_SetPriority(IRQn, 0); IR_Timer.resume(); } @@ -63,6 +56,8 @@ void IR_Encoder::enable() { enc_list.push_back(this); } + pinMode(pin, OUTPUT); + } void IR_Encoder::disable() @@ -73,6 +68,7 @@ void IR_Encoder::disable() { enc_list.erase(it); } + pinMode(pin, INPUT); } void IR_Encoder::setBlindDecoders(IR_DecoderRaw *decoders[], uint8_t count) diff --git a/IR_config.cpp b/IR_config.cpp index 7acf1bc..9ddae25 100644 --- a/IR_config.cpp +++ b/IR_config.cpp @@ -4,7 +4,6 @@ void IR_FOX::setPin(uint8_t pin){ this->pin = pin; port = digitalPinToPort(pin); mask = digitalPinToBitMask(pin); - pinMode(pin, INPUT_PULLUP); } void IR_FOX::checkAddressRuleApply(uint16_t address, uint16_t id, bool &flag) From 71f58a49926fff1496a877bc6078c2c60b07b93a Mon Sep 17 00:00:00 2001 From: DashyFox Date: Thu, 16 Jan 2025 17:53:05 +0300 Subject: [PATCH 4/4] Revert "Update IR-protocol.ino" This reverts commit 79bb804bb424d1fb3927ac0f890b3dca57a302be. --- IR-protocol.ino | 94 +++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 53 deletions(-) diff --git a/IR-protocol.ino b/IR-protocol.ino index 1e9bb6b..56005d9 100644 --- a/IR-protocol.ino +++ b/IR-protocol.ino @@ -4,14 +4,14 @@ #include "MemoryCheck.h" /////////////// Pinout /////////////// -#define dec0_PIN PIN_IR_DEC_FORWARD -// #define dec1_PIN PIN_KT2_IN -// #define dec2_PIN PIN_KT3_IN -// #define dec3_PIN PIN_KT4_IN -// #define dec4_PIN PIN_KT5_IN -// #define dec5_PIN PIN_KT6_IN -// #define dec6_PIN PIN_KT7_IN -// #define dec7_PIN PIN_KT8_IN +#define dec0_PIN PIN_KT1_IN +#define dec1_PIN PIN_KT2_IN +#define dec2_PIN PIN_KT3_IN +#define dec3_PIN PIN_KT4_IN +#define dec4_PIN PIN_KT5_IN +#define dec5_PIN PIN_KT6_IN +#define dec6_PIN PIN_KT7_IN +#define dec7_PIN PIN_KT8_IN // #define dec8_PIN PB8 // #define dec9_PIN PB9 // #define dec10_PIN PB10 @@ -43,7 +43,7 @@ //////////////// Var ///////////////// // IR_Encoder encForward(PA5, 42 /* , &decBackward */); -IR_Encoder enc0(PIN_IR_ENC_FORWARD, 42 /* , &decBackward */); +IR_Encoder enc0(PIN_KT8_OUT, 42 /* , &decBackward */); // IR_Encoder enc1(PA1, 127 /* , &decBackward */); // IR_Encoder enc2(PA2, 137 /* , &decBackward */); // IR_Encoder enc3(PA3, 777 /* , &decBackward */); @@ -59,19 +59,18 @@ IR_Encoder enc0(PIN_IR_ENC_FORWARD, 42 /* , &decBackward */); void EncoderISR() { IR_Encoder::isr(); - digitalToggle(PIN_LED_BACKWARD); } //------------------------------------------------------------------- dec_Ini(0); -// dec_Ini(1); -// dec_Ini(2); -// dec_Ini(3); -// dec_Ini(4); -// dec_Ini(5); -// dec_Ini(6); -// dec_Ini(7); +dec_Ini(1); +dec_Ini(2); +dec_Ini(3); +dec_Ini(4); +dec_Ini(5); +dec_Ini(6); +dec_Ini(7); // dec_Ini(8); // dec_Ini(9); // dec_Ini(10); @@ -182,8 +181,8 @@ Timer t1(500, millis, []() // encBackward.sendData(IR_Broadcast, data2); // encTree.sendData(IR_Broadcast, rawData3); }); -Timer t2(50, millis, []() - { digitalToggle(PIN_LED_SPECIAL_1); }); +// Timer t2(50, millis, []() +// { digitalToggle(LED_BUILTIN); }); Timer signalDetectTimer; ///////////////////////////////////////////////////////////////////// @@ -198,17 +197,10 @@ void setup() NVIC_SetPriority(IRQn_Type::TIM3_IRQn, 0); IR_Timer.resume(); - pinMode(PIN_IR_DEC_FORWARD, INPUT_PULLUP); - pinMode(PIN_LED_BACKWARD, OUTPUT); - pinMode(PIN_LED_FORWARD, OUTPUT); - - pinMode(PIN_LED_SPECIAL_1, OUTPUT); // test - pinMode(PIN_LED_SPECIAL_2, OUTPUT); // test - Serial.begin(SERIAL_SPEED); Serial.println(F(INFO)); - // pinMode(LoopOut, OUTPUT); + pinMode(LoopOut, OUTPUT); // pinMode(SignalDetectLed, OUTPUT); pinMode(dec0_PIN, INPUT_PULLUP); @@ -216,13 +208,13 @@ void setup() static IR_DecoderRaw *blind[]{ &dec0, - // &dec1, - // &dec2, - // &dec3, - // &dec4, - // &dec5, - // &dec6, - // &dec7, + &dec1, + &dec2, + &dec3, + &dec4, + &dec5, + &dec6, + &dec7, // &dec8, // &dec9, // &dec10, @@ -238,13 +230,13 @@ void setup() // enc10.setBlindDecoders(blind, sizeof(blind) / sizeof(IR_DecoderRaw *)); decSetup(0); - // decSetup(1); - // decSetup(2); - // decSetup(3); - // decSetup(4); - // decSetup(5); - // decSetup(6); - // decSetup(7); + decSetup(1); + decSetup(2); + decSetup(3); + decSetup(4); + decSetup(5); + decSetup(6); + decSetup(7); // decSetup(8); // decSetup(9); // decSetup(10); @@ -255,21 +247,20 @@ void setup() void loop() { - // digitalToggle(LoopOut); - digitalWrite(PIN_LED_SPECIAL_2, digitalRead(PIN_IR_DEC_FORWARD)); + digitalToggle(LoopOut); Timer::tick(); IR_Decoder::tick(); bool rx_flag; decStat(0); - // decStat(1); - // decStat(2); - // decStat(3); - // decStat(4); - // decStat(5); - // decStat(6); - // decStat(7); + decStat(1); + decStat(2); + decStat(3); + decStat(4); + decStat(5); + decStat(6); + decStat(7); // decStat(8); // decStat(9); // decStat(10); @@ -327,9 +318,6 @@ void detectSignal() // digitalWrite(SignalDetectLed, HIGH); // signalDetectTimer.delay(50, millis, []() // { digitalWrite(SignalDetectLed, LOW); }); - - digitalToggle(PIN_LED_FORWARD); - } // test