STM First Test

This commit is contained in:
2024-04-16 15:52:59 +03:00
parent ff306e7fae
commit 27a5b28a17
6 changed files with 375 additions and 297 deletions

View File

@ -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)