赤外線リモコンの受信をパルス幅にて行います。 Displays the pulse width of the IR control.
Dependents: IRLED_SendReceveDemo IRreceiver_PulseWidth
IRRcevPulseWidth.cpp@2:674f9ea95a5a, 2016-12-30 (annotated)
- Committer:
- nameless129
- Date:
- Fri Dec 30 04:57:18 2016 +0000
- Revision:
- 2:674f9ea95a5a
- Parent:
- 0:612202986301
- Child:
- 3:b2a1f396ee27
add filter function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nameless129 | 0:612202986301 | 1 | #include "mbed.h" |
nameless129 | 0:612202986301 | 2 | #include "IRRcevPulseWidth.h" |
nameless129 | 0:612202986301 | 3 | |
nameless129 | 0:612202986301 | 4 | IRRcevPulseWidth::IRRcevPulseWidth(PinName InputPin) : _inputPin(InputPin) |
nameless129 | 0:612202986301 | 5 | { |
nameless129 | 0:612202986301 | 6 | fRcevStart = 0; |
nameless129 | 0:612202986301 | 7 | cIRRcev = 0; |
nameless129 | 0:612202986301 | 8 | cIRRceved = 0; |
nameless129 | 0:612202986301 | 9 | IRRcevState_prev = 1; |
nameless129 | 2:674f9ea95a5a | 10 | filterN = 0; |
nameless129 | 0:612202986301 | 11 | } |
nameless129 | 0:612202986301 | 12 | |
nameless129 | 0:612202986301 | 13 | void IRRcevPulseWidth::init(uint16_t *dataPtr,uint16_t dataLim,uint32_t timeout_us) |
nameless129 | 0:612202986301 | 14 | { |
nameless129 | 0:612202986301 | 15 | IRRcevTimeOut = timeout_us; |
nameless129 | 0:612202986301 | 16 | limitUpper_dataN = dataLim; |
nameless129 | 0:612202986301 | 17 | p_data = dataPtr; |
nameless129 | 0:612202986301 | 18 | _timer.start(); |
nameless129 | 0:612202986301 | 19 | IRRcevMicroSec_prev = _timer.read_us(); |
nameless129 | 0:612202986301 | 20 | } |
nameless129 | 2:674f9ea95a5a | 21 | |
nameless129 | 2:674f9ea95a5a | 22 | void IRRcevPulseWidth::setPulseNumFilter(uint16_t n) |
nameless129 | 2:674f9ea95a5a | 23 | { |
nameless129 | 2:674f9ea95a5a | 24 | filterN = n; |
nameless129 | 2:674f9ea95a5a | 25 | } |
nameless129 | 2:674f9ea95a5a | 26 | |
nameless129 | 0:612202986301 | 27 | uint16_t IRRcevPulseWidth::getData_N(void) |
nameless129 | 0:612202986301 | 28 | { |
nameless129 | 0:612202986301 | 29 | return cIRRceved; |
nameless129 | 0:612202986301 | 30 | } |
nameless129 | 0:612202986301 | 31 | |
nameless129 | 0:612202986301 | 32 | int8_t IRRcevPulseWidth::status(void) |
nameless129 | 0:612202986301 | 33 | { |
nameless129 | 0:612202986301 | 34 | int8_t ret=0; |
nameless129 | 0:612202986301 | 35 | IRRcevMicroSec = _timer.read_us(); |
nameless129 | 0:612202986301 | 36 | IRRcevMicroSec_diff = IRRcevMicroSec - IRRcevMicroSec_prev; |
nameless129 | 0:612202986301 | 37 | |
nameless129 | 0:612202986301 | 38 | IRRcevState = _inputPin; |
nameless129 | 0:612202986301 | 39 | if( IRRcevState != IRRcevState_prev ) |
nameless129 | 0:612202986301 | 40 | { |
nameless129 | 0:612202986301 | 41 | if(fRcevStart == 0) |
nameless129 | 0:612202986301 | 42 | { |
nameless129 | 0:612202986301 | 43 | fRcevStart = 1; |
nameless129 | 0:612202986301 | 44 | } |
nameless129 | 0:612202986301 | 45 | else |
nameless129 | 0:612202986301 | 46 | { |
nameless129 | 0:612202986301 | 47 | *(p_data+cIRRcev) = IRRcevMicroSec_diff; |
nameless129 | 0:612202986301 | 48 | cIRRcev++; |
nameless129 | 0:612202986301 | 49 | if(cIRRcev >= limitUpper_dataN) |
nameless129 | 0:612202986301 | 50 | { |
nameless129 | 0:612202986301 | 51 | cIRRcev = 0; |
nameless129 | 0:612202986301 | 52 | ret = -1; |
nameless129 | 0:612202986301 | 53 | } |
nameless129 | 0:612202986301 | 54 | } |
nameless129 | 0:612202986301 | 55 | IRRcevState_prev = IRRcevState; |
nameless129 | 0:612202986301 | 56 | IRRcevMicroSec_prev = IRRcevMicroSec; |
nameless129 | 0:612202986301 | 57 | } |
nameless129 | 0:612202986301 | 58 | else if( (IRRcevMicroSec_diff >= IRRcevTimeOut) && (cIRRcev != 0) ) |
nameless129 | 0:612202986301 | 59 | { |
nameless129 | 0:612202986301 | 60 | #if IR_RCEV_DEBUGOUT_ENABLE |
nameless129 | 0:612202986301 | 61 | DBG("Rceved\r\n"); |
nameless129 | 0:612202986301 | 62 | DBG("RcevCnt:%d\r\n",cIRRcev); |
nameless129 | 0:612202986301 | 63 | for(i=0;i<cIRRcev;i++) |
nameless129 | 0:612202986301 | 64 | { |
nameless129 | 0:612202986301 | 65 | DBG("%d,",*(p_data+i)); |
nameless129 | 0:612202986301 | 66 | } |
nameless129 | 0:612202986301 | 67 | DBG("\r\n"); |
nameless129 | 0:612202986301 | 68 | #endif |
nameless129 | 2:674f9ea95a5a | 69 | if(cIRRcev >= filterN) |
nameless129 | 2:674f9ea95a5a | 70 | { |
nameless129 | 2:674f9ea95a5a | 71 | cIRRceved = cIRRcev; |
nameless129 | 2:674f9ea95a5a | 72 | cIRRcev = 0; |
nameless129 | 2:674f9ea95a5a | 73 | fRcevStart = 0; |
nameless129 | 2:674f9ea95a5a | 74 | ret = 1; |
nameless129 | 2:674f9ea95a5a | 75 | } |
nameless129 | 2:674f9ea95a5a | 76 | else |
nameless129 | 2:674f9ea95a5a | 77 | { |
nameless129 | 2:674f9ea95a5a | 78 | cIRRcev = 0; |
nameless129 | 2:674f9ea95a5a | 79 | fRcevStart = 0; |
nameless129 | 2:674f9ea95a5a | 80 | ret = 0; |
nameless129 | 2:674f9ea95a5a | 81 | } |
nameless129 | 0:612202986301 | 82 | } |
nameless129 | 0:612202986301 | 83 | return ret; |
nameless129 | 0:612202986301 | 84 | } |