diff --git a/IR_Decoder.cpp b/IR_Decoder.cpp index a3f19af..21a3b28 100644 --- a/IR_Decoder.cpp +++ b/IR_Decoder.cpp @@ -24,31 +24,38 @@ void IR_Decoder::writeToBuffer(bool bit) { if (bufBitPos == nextControlBit) { nextControlBit += (isData ? syncBits : bitPerByte); isData = !isData; + i_syncBit = 0; Serial.print(" "); } - Serial.print(bit); + if (isData) { // Запись битов в dataBuffer - dataBuffer[(i_dataBuffer / 8)] |= bit << (7 - i_dataBuffer%8); + if (i_dataBuffer % 8 == 7) { + Serial.print("+"); + } + dataBuffer[(i_dataBuffer / 8)] |= bit << (7 - i_dataBuffer % 8); i_dataBuffer++; bufBitPos++; - i_syncBit = 0; } else { // Проверка контрольных sync битов if (i_syncBit == 0) { // Первый бит синхронизации - if (bit != dataBuffer[((i_dataBuffer - 1) / 8)] & 1 << (7 - ((i_dataBuffer - 1) & ~(~0 << 3)))) { + Serial.print("~"); + if (bit != (dataBuffer[((i_dataBuffer - 1) / 8)] & 1 << (7 - (i_dataBuffer - 1) % 8) & 1)) { bufBitPos++; + i_syncBit++; } else { + i_syncBit = 0; errorCounter++; Serial.print("E"); - // Serial.print("bit: ");Serial.println(bit); - // Serial.print("dataBuffer: ");Serial.println(dataBuffer[((i_dataBuffer - 1) / 8)] & 1 << (7 - ((i_dataBuffer - 1) & ~(~0 << 3)))); + // Serial.print("bit: "); Serial.println(bit); + // Serial.print("dataBuffer: "); Serial.println(dataBuffer[((i_dataBuffer - 1) / 8)] & 1 << (7 - ((i_dataBuffer - 1) & ~(~0 << 3)))); } } else { // Последующие биты синхронизации + Serial.print("`"); bufBitPos++; + i_syncBit++; } - - i_syncBit++; } + Serial.print(bit); // if (bufBitPos >= bufferRawSize * 8 - 1) { isBufferOverflow = true; } @@ -197,12 +204,12 @@ void IR_Decoder::start_RX() { // Serial.println(); // Serial.println(printBytes(dataBuffer, dataByteSizeMax-1, BIN)); // Serial.println(); - + resetAvaliable(); isBufferOverflow = false; memset(rawBuffer, 0x00, bufferRawSize); - + bufBitPos = 0; isData = true; i_dataBuffer = 0; diff --git a/IR_Decoder.h b/IR_Decoder.h index eac7a12..d93b8dc 100644 --- a/IR_Decoder.h +++ b/IR_Decoder.h @@ -21,7 +21,7 @@ #define aroundRise(t) (riseTimeMin < t && t < riseTimeMax) #define IR_timeout ((riseTimeMax * 8) + syncBits +1) // us // таймаут в 8 data + 3 sync + 1 -#define subBufferSize 15 //Буфер для складирования фронтов, пока их не обработают +#define subBufferSize 5 //Буфер для складирования фронтов, пока их не обработают class IR_Encoder; class IR_Decoder : private IR_FOX {