mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2025-06-27 20:59:37 +00:00
STM First Test
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
#include "IR_DecoderRaw.h"
|
||||
#include "IR_Encoder.h"
|
||||
|
||||
IR_DecoderRaw::IR_DecoderRaw(const uint8_t isrPin, uint16_t addr, IR_Encoder *encPair = nullptr) : isrPin(isrPin), encoder(encPair)
|
||||
IR_DecoderRaw::IR_DecoderRaw(const uint8_t isrPin, uint16_t addr, IR_Encoder *encPair) : isrPin(isrPin), encoder(encPair)
|
||||
{
|
||||
id = addr;
|
||||
prevRise = prevFall = prevPrevFall = prevPrevRise = 0;
|
||||
@ -9,6 +9,13 @@ IR_DecoderRaw::IR_DecoderRaw(const uint8_t isrPin, uint16_t addr, IR_Encoder *en
|
||||
{
|
||||
encPair->decPair = this;
|
||||
}
|
||||
|
||||
#ifdef IRDEBUG
|
||||
pinMode(wrHigh, OUTPUT);
|
||||
pinMode(wrLow, OUTPUT);
|
||||
pinMode(writeOp, OUTPUT);
|
||||
pinMode(errOut, OUTPUT);
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////// isr ///////////////////////////////////////////
|
||||
@ -19,7 +26,7 @@ void IR_DecoderRaw::isr()
|
||||
return;
|
||||
|
||||
subBuffer[currentSubBufferIndex].next = nullptr;
|
||||
subBuffer[currentSubBufferIndex].dir = (PIND >> isrPin) & 1;
|
||||
subBuffer[currentSubBufferIndex].dir = digitalRead(isrPin);
|
||||
subBuffer[currentSubBufferIndex].time = micros();
|
||||
|
||||
if (firstUnHandledFront == nullptr)
|
||||
@ -95,17 +102,16 @@ void IR_DecoderRaw::listenStart()
|
||||
void IR_DecoderRaw::tick()
|
||||
{
|
||||
FrontStorage currentFront;
|
||||
uint8_t oldSREG = SREG;
|
||||
cli();
|
||||
noInterrupts();
|
||||
listenStart();
|
||||
if (firstUnHandledFront == nullptr)
|
||||
{
|
||||
isSubBufferOverflow = false;
|
||||
SREG = oldSREG;
|
||||
interrupts();
|
||||
return;
|
||||
} // Если данных нет - ничего не делаем
|
||||
currentFront = *((FrontStorage *)firstUnHandledFront); // найти следующий необработанный фронт/спад
|
||||
SREG = oldSREG;
|
||||
interrupts();
|
||||
if (currentFront.next == nullptr)
|
||||
{
|
||||
isRecive = false;
|
||||
@ -161,7 +167,7 @@ void IR_DecoderRaw::tick()
|
||||
{
|
||||
if (isPreamb)
|
||||
{ // первый фронт после
|
||||
// gotTune.set(riseSyncTime);
|
||||
// gotTune.set(riseSyncTime);
|
||||
}
|
||||
isPreamb = false;
|
||||
}
|
||||
@ -187,7 +193,7 @@ void IR_DecoderRaw::tick()
|
||||
if (aroundRise(risePeriod))
|
||||
{ // тактирование есть, сигнал хороший - без ошибок(?)
|
||||
|
||||
if (highTime > riseTimeMin >> 1)
|
||||
if (highTime > riseTimeMin / 2U)
|
||||
{ // 1
|
||||
#ifdef IRDEBUG
|
||||
digitalWrite(wrHigh, 1);
|
||||
@ -344,13 +350,12 @@ void IR_DecoderRaw::tick()
|
||||
digitalWrite(writeOp, isPreamb);
|
||||
#endif
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
oldSREG = SREG;
|
||||
cli();
|
||||
// noInterrupts();
|
||||
if (firstUnHandledFront != nullptr)
|
||||
{
|
||||
firstUnHandledFront = firstUnHandledFront->next; // переместить флаг на следующий элемент для обработки (next or nullptr)
|
||||
}
|
||||
SREG = oldSREG;
|
||||
// interrupts();
|
||||
}
|
||||
|
||||
void IR_DecoderRaw::writeToBuffer(bool bit)
|
||||
|
Reference in New Issue
Block a user