From b4f644c2588caf961e47bdc9e005add4f456c0dc Mon Sep 17 00:00:00 2001 From: DashyFox Date: Fri, 17 Apr 2026 15:07:54 +0300 Subject: [PATCH] Align main with fix-DMA-and-Analyzer (encoder API, sketch, .gitignore) Restore IR_SendResult + sendDataFULL, fix IR-protocol.ino, match .gitignore to analyzer branch. Made-with: Cursor --- .gitignore | 1 + IR-protocol.ino | 178 +++++++++++++++++++++++------------------------- IR_Encoder.cpp | 5 +- IR_Encoder.h | 10 +-- 4 files changed, 91 insertions(+), 103 deletions(-) diff --git a/.gitignore b/.gitignore index a2e908e..9663919 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .vscode/* bin/* +!.vscode/launch.json log/* /.vscode *.zip diff --git a/IR-protocol.ino b/IR-protocol.ino index 59e5374..1d0e9b0 100644 --- a/IR-protocol.ino +++ b/IR-protocol.ino @@ -2,16 +2,26 @@ #include "IR_Encoder.h" #include "TimerStatic.h" #include "MemoryCheck.h" -#include "CarCmdList.h" /////////////// Pinout /////////////// -#define encForward_PIN 0 -#define encBackward_PIN 5 +#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 +// #define dec11_PIN PB11 +// #define dec12_PIN PB12 +// #define dec13_PIN PB13 +// #define dec14_PIN PB14 +// #define dec15_PIN PB15 -#define LoopOut 12 -#define ISR_Out 10 - -#define TestOut 13 +#define LoopOut PC13 //////////////// Ini ///////////////// @@ -39,35 +49,13 @@ void EncoderISR() IR_Encoder::isr(); } -void decBackwardISR() { - decBackward.isr(); -} +//------------------------------------------------------------------- -static uint8_t* portOut; -ISR(TIMER2_COMPA_vect) { - encForward.isr(); - // encBackward.isr(); - // encTree.isr(); - //TODO: Сделать выбор порта - *portOut = (*portOut & 0b11111110) | - ( - encForward.ir_out_virtual << 0U - // | encBackward.ir_out_virtual << 6U - // | encTree.ir_out_virtual << 2U - ); -} -///////////////////////////////////////////////////////////////////// -uint8_t data0 [] = { }; -uint8_t data1 [] = { 42 }; -uint8_t data2 [] = { 42 , 127 }; -uint8_t data3 [] = { 42 , 127, 137 }; -uint8_t data4 [] = { 42 , 127, 137, 255 }; +IR_Decoder dec0(dec0_PIN, 0); +void dec_0_ISR() { dec0.isr(); } -uint32_t loopTimer; -uint8_t sig = 255; - -uint16_t targetAddr = IR_Broadcast; -Timer t1(750, millis, []() { +IR_Decoder dec1(dec1_PIN, 1); +void dec_1_ISR() { dec1.isr(); } IR_Decoder dec2(dec2_PIN, 2); void dec_2_ISR() { dec2.isr(); } @@ -93,19 +81,8 @@ void dec_7_ISR() { dec7.isr(); } // IR_Decoder dec9(dec9_PIN, 9); // void dec_9_ISR() { dec9.isr(); } - default: - break; - } - // encBackward.sendData(IR_Broadcast, data2); - // encTree.sendData(IR_Broadcast, rawData3); -}); -Timer t2(500, millis, []() { - digitalToggle(13); -}); -///////////////////////////////////////////////////////////////////// -void setup() { - IR_Encoder::timerSetup(); - portOut = &PORTB; +// IR_Decoder dec10(dec10_PIN, 10); +// void dec_10_ISR() { dec10.isr(); } // IR_Decoder dec11(dec11_PIN, 11); // void dec_11_ISR() { dec11.isr(); } @@ -123,14 +100,9 @@ uint8_t data2[] = {42, 127}; uint8_t data3[] = {42, 127, 137}; uint8_t data4[] = {42, 127, 137, 255}; - pinMode(8, OUTPUT); - pinMode(9, OUTPUT); - pinMode(11, OUTPUT); - pinMode(13, OUTPUT); - pinMode(encForward_PIN, OUTPUT); - pinMode(encBackward_PIN, OUTPUT); - pinMode(13, OUTPUT); - pinMode(12, OUTPUT); +uint32_t loopTimer; +uint8_t sig = 0; +uint16_t targetAddr = IR_Broadcast; Timer t1(500, millis, []() { @@ -245,30 +217,61 @@ void setup() pinMode(LoopOut, OUTPUT); - attachInterrupt(0, decForwardISR, CHANGE); // D2 - attachInterrupt(1, decBackwardISR, CHANGE); // D3 + pinMode(dec0_PIN, INPUT_PULLUP); + pinMode(dec1_PIN, INPUT_PULLUP); + pinMode(dec2_PIN, INPUT_PULLUP); + pinMode(dec3_PIN, INPUT_PULLUP); + pinMode(dec4_PIN, INPUT_PULLUP); + pinMode(dec5_PIN, INPUT_PULLUP); + pinMode(dec6_PIN, INPUT_PULLUP); + pinMode(dec7_PIN, INPUT_PULLUP); + // pinMode(dec8_PIN, INPUT_PULLUP); + // pinMode(dec9_PIN, INPUT_PULLUP); + // pinMode(dec10_PIN, INPUT_PULLUP); + // pinMode(dec11_PIN, INPUT_PULLUP); + // pinMode(dec12_PIN, INPUT_PULLUP); + // pinMode(dec13_PIN, INPUT_PULLUP); + + attachInterrupt(dec0_PIN, dec_0_ISR, CHANGE); + attachInterrupt(dec1_PIN, dec_1_ISR, CHANGE); + attachInterrupt(dec2_PIN, dec_2_ISR, CHANGE); + attachInterrupt(dec3_PIN, dec_3_ISR, CHANGE); + attachInterrupt(dec4_PIN, dec_4_ISR, CHANGE); + attachInterrupt(dec5_PIN, dec_5_ISR, CHANGE); + attachInterrupt(dec6_PIN, dec_6_ISR, CHANGE); + attachInterrupt(dec7_PIN, dec_7_ISR, CHANGE); + // attachInterrupt(dec8_PIN, dec_8_ISR, CHANGE); + // attachInterrupt(dec9_PIN, dec_9_ISR, CHANGE); + // attachInterrupt(dec10_PIN, dec_10_ISR, CHANGE); + // attachInterrupt(dec11_PIN, dec_11_ISR, CHANGE); + // attachInterrupt(dec12_PIN, dec_12_ISR, CHANGE); + // attachInterrupt(dec13_PIN, dec_13_ISR, CHANGE); } - -bool testLed = false; -uint32_t testLed_timer; - -void loop() { - // digitalToggle(LoopOut); +void loop() +{ + digitalToggle(LoopOut); Timer::tick(); + IR_Decoder::tick(); - decForward.tick(); - decBackward.tick(); + bool rx_flag = false; + rx_flag |= status(dec0); + rx_flag |= status(dec1); + rx_flag |= status(dec2); + rx_flag |= status(dec3); + rx_flag |= status(dec4); + rx_flag |= status(dec5); + rx_flag |= status(dec6); + rx_flag |= status(dec7); + // rx_flag |= status(dec8); + // rx_flag |= status(dec9); + // rx_flag |= status(dec10); + // rx_flag |= status(dec11); + // rx_flag |= status(dec12); + // rx_flag |= status(dec13); - status(decForward); - status(decBackward); - - - // Serial.println(micros() - loopTimer); - // loopTimer = micros(); - // delayMicroseconds(120*5); - - if (Serial.available()) { + if (Serial.available()) + { uint8_t in = Serial.parseInt(); switch (in) { @@ -286,13 +289,6 @@ void loop() { break; } } - - if(testLed && millis() - testLed_timer > 100){ - testLed=false; - digitalWrite(12, LOW); - - } - } @@ -320,19 +316,13 @@ void detectSignal() // { digitalWrite(SignalDetectLed, LOW); }); } - - -//test -void status(IR_Decoder& dec) { - if (dec.gotData.available() && dec.gotData.getAddrFrom() != 42) { - - digitalWrite(12, HIGH); - testLed = true; - testLed_timer = millis(); - - encForward.sendData(IR_Broadcast, CarCmd::stop); //<<<<<<<<<<<<<<<<<<<<<<<<<<< CMD IS HERE - - +// test +bool status(IR_Decoder &dec) +{ + if (dec.gotData.available()) + { + detectSignal(); + // Serial.println(micros()); String str; if (/* dec.gotData.getDataPrt()[1] */ 1) { diff --git a/IR_Encoder.cpp b/IR_Encoder.cpp index 3bc6ddc..ce9f163 100644 --- a/IR_Encoder.cpp +++ b/IR_Encoder.cpp @@ -477,10 +477,7 @@ IR_SendResult IR_Encoder::sendData(uint16_t addrTo, uint8_t *data, uint8_t len, return sendDataFULL(id, addrTo, data, len, needAccept); } -void IR_Encoder::sendData(uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false){ - sendData(id, addrTo, data, len, needAccept); -} -void IR_Encoder::sendData(uint16_t addrFrom, uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false) +IR_SendResult IR_Encoder::sendDataFULL(uint16_t addrFrom, uint16_t addrTo, uint8_t *data, uint8_t len, bool needAccept) { if (len > bytePerPack) { diff --git a/IR_Encoder.h b/IR_Encoder.h index 85bbe23..ff5ced4 100644 --- a/IR_Encoder.h +++ b/IR_Encoder.h @@ -21,8 +21,7 @@ class IR_Encoder : public IR_FOX static IR_Encoder *last; IR_Encoder *next; public: -private: - // uint16_t id; /// @brief Адрес передатчика + static HardwareTimer* IR_Timer; using IR_TxGateRun = IrTxGateRun; @@ -97,9 +96,10 @@ public: } void rawSend(uint8_t *ptr, uint8_t len); - void sendData(uint16_t addrTo, uint8_t dataByte, bool needAccept = false); - void sendData(uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); - void sendData(uint16_t addrFrom, uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); + IR_SendResult sendData(uint16_t addrTo, uint8_t dataByte, bool needAccept = false); + IR_SendResult sendData(uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); + IR_SendResult sendDataFULL(uint16_t addrFrom, uint16_t addrTo, uint8_t *data = nullptr, uint8_t len = 0, bool needAccept = false); + IR_SendResult sendAccept(uint16_t addrTo, uint8_t customByte = 0); IR_SendResult sendRequest(uint16_t addrTo);