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

Dependents:   IRLED_SendReceveDemo IRreceiver_PulseWidth

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?

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