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

Dependencies:   mbed IRRcevPulseWidth

Fork of irreceiver by Nobuki HIRAMINE

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