赤外線リモコンの受信をパルス幅にて行います。 Displays the pulse width of the IR control.

Dependents:   IRLED_SendReceveDemo IRreceiver_PulseWidth

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?

UserRevisionLine numberNew 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 }