From b6b9d2c82093930d605c4bdcc594910146dcaa91 Mon Sep 17 00:00:00 2001 From: DashyFox Date: Thu, 16 Jan 2025 17:51:21 +0300 Subject: [PATCH] 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)