赤外線リモコンの受信をパルス幅にて行います。 Displays the pulse width of the IR control.
Dependents: IRLED_SendReceveDemo IRreceiver_PulseWidth
IRRcevPulseWidth.cpp@0:612202986301, 2016-12-25 (annotated)
- Committer:
- nameless129
- Date:
- Sun Dec 25 08:54:15 2016 +0000
- Revision:
- 0:612202986301
- Child:
- 2:674f9ea95a5a
first commit
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 | 0:612202986301 | 10 | } |
nameless129 | 0:612202986301 | 11 | |
nameless129 | 0:612202986301 | 12 | void IRRcevPulseWidth::init(uint16_t *dataPtr,uint16_t dataLim,uint32_t timeout_us) |
nameless129 | 0:612202986301 | 13 | { |
nameless129 | 0:612202986301 | 14 | IRRcevTimeOut = timeout_us; |
nameless129 | 0:612202986301 | 15 | limitUpper_dataN = dataLim; |
nameless129 | 0:612202986301 | 16 | p_data = dataPtr; |
nameless129 | 0:612202986301 | 17 | _timer.start(); |
nameless129 | 0:612202986301 | 18 | IRRcevMicroSec_prev = _timer.read_us(); |
nameless129 | 0:612202986301 | 19 | } |
nameless129 | 0:612202986301 | 20 | |
nameless129 | 0:612202986301 | 21 | uint16_t IRRcevPulseWidth::getData_N(void) |
nameless129 | 0:612202986301 | 22 | { |
nameless129 | 0:612202986301 | 23 | return cIRRceved; |
nameless129 | 0:612202986301 | 24 | } |
nameless129 | 0:612202986301 | 25 | |
nameless129 | 0:612202986301 | 26 | int8_t IRRcevPulseWidth::status(void) |
nameless129 | 0:612202986301 | 27 | { |
nameless129 | 0:612202986301 | 28 | int8_t ret=0; |
nameless129 | 0:612202986301 | 29 | IRRcevMicroSec = _timer.read_us(); |
nameless129 | 0:612202986301 | 30 | IRRcevMicroSec_diff = IRRcevMicroSec - IRRcevMicroSec_prev; |
nameless129 | 0:612202986301 | 31 | |
nameless129 | 0:612202986301 | 32 | IRRcevState = _inputPin; |
nameless129 | 0:612202986301 | 33 | if( IRRcevState != IRRcevState_prev ) |
nameless129 | 0:612202986301 | 34 | { |
nameless129 | 0:612202986301 | 35 | if(fRcevStart == 0) |
nameless129 | 0:612202986301 | 36 | { |
nameless129 | 0:612202986301 | 37 | fRcevStart = 1; |
nameless129 | 0:612202986301 | 38 | } |
nameless129 | 0:612202986301 | 39 | else |
nameless129 | 0:612202986301 | 40 | { |
nameless129 | 0:612202986301 | 41 | *(p_data+cIRRcev) = IRRcevMicroSec_diff; |
nameless129 | 0:612202986301 | 42 | cIRRcev++; |
nameless129 | 0:612202986301 | 43 | if(cIRRcev >= limitUpper_dataN) |
nameless129 | 0:612202986301 | 44 | { |
nameless129 | 0:612202986301 | 45 | cIRRcev = 0; |
nameless129 | 0:612202986301 | 46 | ret = -1; |
nameless129 | 0:612202986301 | 47 | } |
nameless129 | 0:612202986301 | 48 | } |
nameless129 | 0:612202986301 | 49 | IRRcevState_prev = IRRcevState; |
nameless129 | 0:612202986301 | 50 | IRRcevMicroSec_prev = IRRcevMicroSec; |
nameless129 | 0:612202986301 | 51 | } |
nameless129 | 0:612202986301 | 52 | else if( (IRRcevMicroSec_diff >= IRRcevTimeOut) && (cIRRcev != 0) ) |
nameless129 | 0:612202986301 | 53 | { |
nameless129 | 0:612202986301 | 54 | #if IR_RCEV_DEBUGOUT_ENABLE |
nameless129 | 0:612202986301 | 55 | DBG("Rceved\r\n"); |
nameless129 | 0:612202986301 | 56 | DBG("RcevCnt:%d\r\n",cIRRcev); |
nameless129 | 0:612202986301 | 57 | for(i=0;i<cIRRcev;i++) |
nameless129 | 0:612202986301 | 58 | { |
nameless129 | 0:612202986301 | 59 | DBG("%d,",*(p_data+i)); |
nameless129 | 0:612202986301 | 60 | } |
nameless129 | 0:612202986301 | 61 | DBG("\r\n"); |
nameless129 | 0:612202986301 | 62 | #endif |
nameless129 | 0:612202986301 | 63 | cIRRceved = cIRRcev; |
nameless129 | 0:612202986301 | 64 | cIRRcev = 0; |
nameless129 | 0:612202986301 | 65 | fRcevStart = 0; |
nameless129 | 0:612202986301 | 66 | ret = 1; |
nameless129 | 0:612202986301 | 67 | } |
nameless129 | 0:612202986301 | 68 | return ret; |
nameless129 | 0:612202986301 | 69 | } |