diff --git a/IR-protocol.ino b/IR-protocol.ino index aab7751..0d17e99 100644 --- a/IR-protocol.ino +++ b/IR-protocol.ino @@ -4,10 +4,7 @@ #include "MemoryCheck.h" /////////////// Pinout /////////////// -#define encForward_PIN PA0 -#define encBackward_PIN PA1 - -#define dec0_PIN PB0 +#define dec0_PIN PB15 #define dec1_PIN PB1 #define dec2_PIN PB2 #define dec3_PIN PB3 @@ -24,7 +21,7 @@ #define dec14_PIN PB14 #define dec15_PIN PB15 -#define LoopOut PC13 +// #define LoopOut PA7 //////////////// Ini ///////////////// @@ -35,211 +32,63 @@ //////////////// Var ///////////////// IR_Decoder dec0(dec1_PIN, 0); -IR_Decoder dec1(dec2_PIN, 1); +// IR_Decoder dec1(dec2_PIN, 1); -IR_Encoder encForward(42 /* , &decBackward */); -// IR_Encoder encBackward(321, encBackward_PIN); -// IR_Encoder encTree(325, A2); //////////////////////// Функции прерываний //////////////////////// -void EncoderISR() -{ - encForward.isr(); - // encBackward.isr(); - // encTree.isr(); - - digitalWrite(PB5, encForward.ir_out_virtual); -} - //------------------------------------------------------------------ -#define dec_ISR(n) void dec_##n##_ISR() { dec##n.isr(); } -#define decPinMode(n) pinMode(dec##n##_PIN, INPUT_PULLUP); -#define decAttach(n) attachInterrupt(dec##n##_PIN, dec_##n##_ISR, CHANGE); -#define decSetup(n) /* decPinMode(n); */ decAttach(n); -#define decTick(n) dec##n.tick(); -#define decStat(n) rx_flag |= statusSimple(dec##n); +// #define dec_ISR(n) void dec_##n##_ISR() { dec##n.isr(); } +// #define decPinMode(n) pinMode(dec##n##_PIN, INPUT_PULLUP); +// #define decAttach(n) attachInterrupt(dec##n##_PIN, dec_##n##_ISR, CHANGE); +// #define decSetup(n) decPinMode(n); decAttach(n); +// #define decTick(n) dec##n.tick(); +// #define decStat(n) rx_flag |= statusSimple(dec##n); -dec_ISR(0); -dec_ISR(1); - - -///////////////////////////////////////////////////////////////////// -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}; - -uint32_t loopTimer; -uint8_t sig = 0; -uint16_t targetAddr = IR_Broadcast; -Timer t1(500, millis, []() - { - // Serial.println(sig); - - switch (sig) - { - case 0: - encForward.sendData(targetAddr); - break; - case 1: - encForward.sendData(targetAddr, data1, sizeof(data1)); - break; - case 2: - encForward.sendData(targetAddr, data2, sizeof(data2)); - break; - case 3: - encForward.sendData(targetAddr, data3, sizeof(data3)); - break; - case 4: - encForward.sendData(targetAddr, data4, sizeof(data4)); - break; - - case 10: - encForward.sendData(targetAddr, data0, sizeof(data0), true); - break; - case 11: - encForward.sendData(targetAddr, data1, sizeof(data1), true); - break; - case 12: - encForward.sendData(targetAddr, data2, sizeof(data2), true); - break; - case 13: - encForward.sendData(targetAddr, data3, sizeof(data3), true); - break; - case 14: - encForward.sendData(targetAddr, data4, sizeof(data4), true); - break; - - case 20: - encForward.sendBack(); - break; - case 21: - encForward.sendBack(data1, sizeof(data1)); - break; - case 22: - encForward.sendBack(data2, sizeof(data2)); - break; - case 23: - encForward.sendBack(data3, sizeof(data3)); - break; - case 24: - encForward.sendBack(data4, sizeof(data4)); - break; - - case 30: - encForward.sendBackTo(targetAddr); - break; - case 31: - encForward.sendBackTo(targetAddr, data1, sizeof(data1)); - break; - case 32: - encForward.sendBackTo(targetAddr, data2, sizeof(data2)); - break; - case 33: - encForward.sendBackTo(targetAddr, data3, sizeof(data3)); - break; - case 34: - encForward.sendBackTo(targetAddr, data4, sizeof(data4)); - break; - - case 41: - encForward.sendRequest(targetAddr); - break; - case 42: - encForward.sendAccept(targetAddr); - break; - - default: - break; - } - // encBackward.sendData(IR_Broadcast, data2); - // encTree.sendData(IR_Broadcast, rawData3); - }); -// Timer t2(50, millis, []() -// { digitalToggle(LED_BUILTIN); }); - -Timer signalDetectTimer; -///////////////////////////////////////////////////////////////////// -HardwareTimer IR_Timer(TIM3); -HardwareTimer MicrosTimer(TIM1); - -void MicrosTimerISR(){ +// dec_ISR(0); +// dec_ISR(1); +void dec_0_ISR() { + dec0.isr(); } + +///////////////////////////////////////////////////////////////////// + +Timer t1(50, millis, []() + { digitalToggle(LED_BUILTIN); }); + +///////////////////////////////////////////////////////////////////// + void setup() { Serial.begin(SERIAL_SPEED); Serial.println(F(INFO)); - IR_Timer.setOverflow(carrierFrec*2, HERTZ_FORMAT); - IR_Timer.attachInterrupt(1, EncoderISR); - - pinMode(LoopOut, OUTPUT); - - // IR_DecoderRaw* blindFromForward [] { &decForward, &decBackward }; - // encForward.setBlindDecoders(blindFromForward, sizeof(blindFromForward) / sizeof(IR_DecoderRaw*)); - - - pinMode(encForward_PIN, OUTPUT); - pinMode(encBackward_PIN, OUTPUT); + // pinMode(LoopOut, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); + pinMode(dec0_PIN, INPUT_PULLUP); -decSetup(0); - + attachInterrupt(dec0_PIN, dec_0_ISR, CHANGE); } void loop() { - digitalToggle(LoopOut); + // digitalToggle(LoopOut); Timer::tick(); - - - decTick(0); - decTick(1); + dec0.tick(); bool rx_flag; - decStat(0); - decStat(1); + rx_flag |= statusSimple(dec0); if(rx_flag){ Serial.print("\n\n\n\n"); } - - if (Serial.available()) - { - uint8_t in = Serial.parseInt(); - switch (in) - { - case 100: - targetAddr = IR_Broadcast; - break; - case 101: - targetAddr = 555; - break; - case 102: - targetAddr = 777; - break; - - default: - sig = in; - break; - } - } } -void detectSignal() -{ - // digitalWrite(SignalDetectLed, HIGH); - // signalDetectTimer.delay(50, millis, []() - // { digitalWrite(SignalDetectLed, LOW); }); -} - -// test +//////////////////////////////////////////////////////////////////////// bool statusSimple(IR_Decoder &dec){ bool ret; @@ -250,255 +99,3 @@ bool statusSimple(IR_Decoder &dec){ return ret; } -void status(IR_Decoder &dec) -{ - if (dec.gotData.available()) - { - detectSignal(); - Serial.println(micros()); - String str; - if (/* dec.gotData.getDataPrt()[1] */ 1) - { - str += ("Data on pin "); - str += (dec.isrPin); - str += "\n"; - - uint8_t msg = dec.gotData.getMsgRAW(); - str += (" MSG: "); - for (size_t i = 0; i < 8; i++) - { - if (i == 3) - str += " "; - str += (msg >> (7 - i)) & 1U; - } - - str += "\n"; - - str += (" DATA SIZE: "); - str += (dec.gotData.getDataSize()); - str += "\n"; - str += (" ADDRESS FROM: "); - str += (dec.gotData.getAddrFrom()); - str += "\n"; - str += (" ADDRESS TO: "); - str += (dec.gotData.getAddrTo()); - str += "\n"; - // str += (" CRC PACK: "); str += (dec.gotData.getCrcIN()); str += "\n"; - // str += (" CRC CALC: "); str += (dec.gotData.getCrcCALC()); str += "\n"; - str += "\n"; - - for (size_t i = 0; i < min(uint8_t(10), dec.gotData.getDataSize()); i++) - { - switch (i) - { - // case 0: - // str += (" ADDR: "); - // break; - // case 1: - // str += (" CMD: "); - // break; - - default: - str += (" Data["); - str += (i); - str += ("]: "); - break; - } - str += (dec.gotData.getDataPrt()[i]); - str += "\n"; - } - - str += ("\n*******ErrAll: "); - str += (dec.gotData.getErrorCount()); - str += "\n"; - str += ("**ErrDistance: "); - str += ((int)(dec.gotData.getErrorHighSignal() - dec.gotData.getErrorLowSignal())); - str += "\n"; - - str += "\n"; - } - else - { - str += ("SELF"); - str += "\n"; - str += "\n"; - } - // obj->resetAvailable(); - Serial.write(str.c_str()); - } - - if (dec.gotBackData.available()) - { - detectSignal(); - String str; - if (/* dec.gotData.getDataPrt()[1] */ 1) - { - str += ("BackData on pin "); - str += (dec.isrPin); - str += "\n"; - - uint8_t msg = dec.gotBackData.getMsgRAW(); - str += (" MSG: "); - for (size_t i = 0; i < 8; i++) - { - if (i == 3) - str += " "; - str += (msg >> (7 - i)) & 1U; - } - - str += "\n"; - - str += (" DATA SIZE: "); - str += (dec.gotBackData.getDataSize()); - str += "\n"; - str += (" ADDRESS FROM: "); - str += (dec.gotBackData.getAddrFrom()); - str += "\n"; - // str += (" ADDRESS TO: "); str += (dec.gotBackData.getAddrTo()); str += "\n"; - // str += (" CRC PACK: "); str += (dec.gotBackData.getCrcIN()); str += "\n"; - // str += (" CRC CALC: "); str += (dec.gotBackData.getCrcCALC()); str += "\n"; - str += "\n"; - - for (size_t i = 0; i < min(uint8_t(10), dec.gotBackData.getDataSize()); i++) - { - switch (i) - { - // case 0: - // str += (" ADDR: "); - // break; - // case 1: - // str += (" CMD: "); - // break; - - default: - str += (" Data["); - str += (i); - str += ("]: "); - break; - } - str += (dec.gotBackData.getDataPrt()[i]); - str += "\n"; - } - - str += ("\n*******ErrAll: "); - str += (dec.gotBackData.getErrorCount()); - str += "\n"; - str += ("**ErrDistance: "); - str += ((int)(dec.gotBackData.getErrorHighSignal() - dec.gotBackData.getErrorLowSignal())); - str += "\n"; - - str += "\n"; - } - else - { - str += ("SELF"); - str += "\n"; - str += "\n"; - } - // obj->resetAvailable(); - Serial.write(str.c_str()); - } - - if (dec.gotAccept.available()) - { - detectSignal(); - String str; - if (/* dec.gotData.getDataPrt()[1] */ 1) - { - str += ("Accept on pin "); - str += (dec.isrPin); - str += "\n"; - - uint8_t msg = dec.gotAccept.getMsgRAW(); - str += (" MSG: "); - for (size_t i = 0; i < 8; i++) - { - if (i == 3) - str += " "; - str += (msg >> (7 - i)) & 1U; - } - - str += "\n"; - - // str += (" DATA SIZE: "); str += (dec.gotAccept.getDataSize()); str += "\n"; - str += (" ADDRESS FROM: "); - str += (dec.gotAccept.getAddrFrom()); - str += "\n"; - // str += (" ADDRESS TO: "); str += (dec.gotAccept.getAddrTo()); str += "\n"; - // str += (" CRC PACK: "); str += (dec.gotAccept.getCrcIN()); str += "\n"; - // str += (" CRC CALC: "); str += (dec.gotAccept.getCrcCALC()); str += "\n"; - str += "\n"; - - str += (" Data: "); - str += (dec.gotAccept.getCustomByte()); - - str += ("\n\n*******ErrAll: "); - str += (dec.gotAccept.getErrorCount()); - str += "\n"; - str += ("**ErrDistance: "); - str += ((int)(dec.gotAccept.getErrorHighSignal() - dec.gotAccept.getErrorLowSignal())); - str += "\n"; - - str += "\n"; - } - else - { - str += ("SELF"); - str += "\n"; - str += "\n"; - } - // obj->resetAvailable(); - Serial.write(str.c_str()); - } - - if (dec.gotRequest.available()) - { - detectSignal(); - String str; - if (/* dec.gotData.getDataPrt()[1] */ 1) - { - str += ("Request on pin "); - str += (dec.isrPin); - str += "\n"; - - uint8_t msg = dec.gotRequest.getMsgRAW(); - str += (" MSG: "); - for (size_t i = 0; i < 8; i++) - { - if (i == 3) - str += " "; - str += (msg >> (7 - i)) & 1U; - } - - str += "\n"; - - // str += (" DATA SIZE: "); str += (dec.gotRequest.getDataSize()); str += "\n"; - str += (" ADDRESS FROM: "); - str += (dec.gotRequest.getAddrFrom()); - str += "\n"; - str += (" ADDRESS TO: "); - str += (dec.gotRequest.getAddrTo()); - str += "\n"; - // str += (" CRC PACK: "); str += (dec.gotRequest.getCrcIN()); str += "\n"; - // str += (" CRC CALC: "); str += (dec.gotRequest.getCrcCALC()); str += "\n"; - str += "\n"; - - str += ("\n*******ErrAll: "); - str += (dec.gotRequest.getErrorCount()); - str += "\n"; - str += ("**ErrDistance: "); - str += ((int)(dec.gotRequest.getErrorHighSignal() - dec.gotRequest.getErrorLowSignal())); - str += "\n"; - - str += "\n"; - } - else - { - str += ("SELF"); - str += "\n"; - str += "\n"; - } - // obj->resetAvailable(); - Serial.write(str.c_str()); - } -}