赤外線リモコンのパルス幅を表示します
Dependencies: mbed IRRcevPulseWidth
Fork of irreceiver by
Diff: main.cpp
- Revision:
- 2:65739f894d3b
- Parent:
- 1:cc9fd4010a3d
- Child:
- 3:ba3fe24e6306
--- a/main.cpp Sun May 15 15:52:48 2016 +0000 +++ b/main.cpp Sun Dec 25 03:04:21 2016 +0000 @@ -1,35 +1,52 @@ #include "mbed.h" +#include <string.h> -DigitalIn g_dpinIrReceiver(p20); +#define IR_RCEV_MAX_IR_RECEV_NUM (400) +#define IR_RCEV_TIMEOUT_US (100000) + +DigitalIn g_dpinIrReceiver(D12); Serial g_serial(USBTX, USBRX); int main() { - g_serial.baud(115200); + g_serial.baud(9600); Timer timer; + uint32_t IRRcevMicroSec_prev; + uint32_t IRRcevMicroSec,IRRcevMicroSec_diff; + uint8_t IRRcevState,IRRcevState_prev = 1; + uint16_t IR_RcevData[IR_RCEV_MAX_IR_RECEV_NUM]; + uint16_t cIRRcev=0; + uint16_t i=0; + + memset(IR_RcevData,0,sizeof(IR_RcevData)); timer.start(); - int iMicroSec_prev = timer.read_us(); - int iState,iState_prev = 1; - int iMicroSec,iMicroSec_diff; + IRRcevMicroSec_prev = timer.read_us(); while(1) { - iState = g_dpinIrReceiver; - if( iState != iState_prev ) + IRRcevMicroSec = timer.read_us(); + IRRcevMicroSec_diff = IRRcevMicroSec - IRRcevMicroSec_prev; + + IRRcevState = g_dpinIrReceiver; + if( IRRcevState != IRRcevState_prev ) { - iState_prev = iState; - iMicroSec = timer.read_us(); - iMicroSec_diff = iMicroSec - iMicroSec_prev; - if(iMicroSec_diff >= 1000000) + IRRcevState_prev = IRRcevState; + IR_RcevData[cIRRcev] = IRRcevMicroSec_diff; + cIRRcev++; + IRRcevMicroSec_prev = IRRcevMicroSec; + } + else if( (IRRcevMicroSec_diff >= IR_RCEV_TIMEOUT_US) && (cIRRcev != 0) ) + { + g_serial.printf("Rceved\r\n"); + g_serial.printf("RcevCnt:%d\r\n",cIRRcev); + for(i=1;i<cIRRcev;i++) { - g_serial.printf( "\r\n\r\n"); + g_serial.printf("%d,",IR_RcevData[i]); } - else - { - g_serial.printf( "%d, ", iMicroSec_diff ); - } - iMicroSec_prev = iMicroSec; + g_serial.printf("\r\n"); + cIRRcev = 0; + memset(IR_RcevData,0,sizeof(IR_RcevData)); } } }