RoemoteIR
Diff: ReceiverIR.cpp
- Revision:
- 12:5833495063f7
- Parent:
- 11:268cc2ab63bd
--- a/ReceiverIR.cpp Mon Sep 20 00:54:59 2010 +0000 +++ b/ReceiverIR.cpp Wed Jun 12 08:05:57 2019 +0000 @@ -22,7 +22,7 @@ evt.fall(this, &ReceiverIR::isr_fall); evt.rise(this, &ReceiverIR::isr_rise); evt.mode(PullUp); - ticker.attach_us(this, &ReceiverIR::isr_wdt, 10 * 1000); + ticker.attach_us(this, &ReceiverIR::isr_wdt, 10 * 1000); // 0.1초 } /** @@ -73,19 +73,19 @@ return nbits; } -void ReceiverIR::init_state(void) { +void ReceiverIR::init_state(void) { // init_state function work.c1 = -1; work.c2 = -1; work.c3 = -1; work.d1 = -1; work.d2 = -1; work.state = Idle; - data.format = RemoteIR::UNKNOWN; + data.format = RemoteIR::UNKNOWN; // 코드 방식 미정, 모 data.bitcount = 0; timer.stop(); timer.reset(); for (int i = 0; i < sizeof(data.buffer); i++) { - data.buffer[i] = 0; + data.buffer[i] = 0; // 8바이트 buffer 0으로 초기화 } } @@ -126,7 +126,7 @@ work.c3 = timer.read_us(); int a = work.c2 - work.c1; int b = work.c3 - work.c2; - if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 8)) { + if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 8)) { // 9 sec, 4.5 sec /* * NEC. */ @@ -172,11 +172,11 @@ case Receiving: if (RemoteIR::NEC == data.format) { work.d2 = timer.read_us(); - int a = work.d2 - work.d1; - if (InRange(a, RemoteIR::TUS_NEC * 3)) { - data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8)); - } else if (InRange(a, RemoteIR::TUS_NEC * 1)) { - data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8)); + int a = work.d2 - work.d1; // a = rising 했다가 falling 하는 그 사이 시간 + if (InRange(a, RemoteIR::TUS_NEC * 3)) { // 1인 경우 + data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8)); // 무조건 1을 만들겠다 + } else if (InRange(a, RemoteIR::TUS_NEC * 1)) { // 0인 경우 + data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8)); // 무조건 0을 만들겠다 } data.bitcount++; #if 0 @@ -232,6 +232,7 @@ } break; case Received: + code = data.buffer[2]; break; default: break;