赤外線リモコンのパルス幅を表示します

Dependencies:   mbed IRRcevPulseWidth

Fork of irreceiver by Nobuki HIRAMINE

main.cpp

Committer:
nameless129
Date:
2016-12-25
Revision:
2:65739f894d3b
Parent:
1:cc9fd4010a3d
Child:
3:ba3fe24e6306

File content as of revision 2:65739f894d3b:

#include "mbed.h"
#include <string.h>

#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(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();
    IRRcevMicroSec_prev = timer.read_us();

    while(1)
    {
        IRRcevMicroSec = timer.read_us();
        IRRcevMicroSec_diff = IRRcevMicroSec - IRRcevMicroSec_prev;

        IRRcevState = g_dpinIrReceiver;
        if( IRRcevState != IRRcevState_prev )
        {
            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("%d,",IR_RcevData[i]);
            }
            g_serial.printf("\r\n");
            cIRRcev = 0;
            memset(IR_RcevData,0,sizeof(IR_RcevData));
        }
    }
}