LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)

Dependencies:   AQM0802A DigitalSw mbed

Revision:
3:2a8fdcc54c95
Parent:
2:f22110fb3925
Child:
4:001603e48dc8
--- a/priodMsurement.cpp	Sat May 27 08:20:20 2017 +0000
+++ b/priodMsurement.cpp	Mon Jun 05 12:31:15 2017 +0000
@@ -1,12 +1,9 @@
 #include "mbed.h"
-#include <AQM0802A.h>
 #include "priodMsurement.h"
 
 DigitalOut dbgPort (p19);
 DigitalOut dbg2Port (p18);
 
-I2C i2c(p28, p27);
-AQM0802A lcd(i2c);    // if 5.0v supply, (i2c, false);
 
 Timer hiTimer;  // hi priod timer
 Timer loTimer; // low priod timer
@@ -17,11 +14,44 @@
 int32_t hiCompleteTime;    // 1/1 [ms]/count
 int32_t loCompleteTime;
 
+int32_t D_surement[50][2];  // LCD表示用測定値保管
+uint8_t P_surement = 0;     // D_surement[ここ][] のポインタ
+#define Z_nonSurement (-1)  // D_surementの最終位置(不定値)
+
 int8_t beforeLevel = -1; // 0:Lo 1:Hi -1:timeOut(non Pluse)
 
+#define Z_initialSurement (-1)// surementPut()への初期化指示
+#define Z_hiSurement (0)     // surementPut()へのON時間記憶指示
+#define Z_loSurement (1)     // surementPut()へのOFF時間記憶指示
+void surementPut(int8_t hilo, int32_t surement)
+{
+    if(hilo == Z_initialSurement) {
+        P_surement = 0;
+        D_surement[P_surement][Z_hiSurement] = (int32_t)Z_initialSurement;
+        D_surement[P_surement][Z_loSurement] = (int32_t)Z_initialSurement;
+    } else {
+        D_surement[P_surement][hilo] = surement;
+        D_surement[P_surement + 1][hilo] = (int32_t)Z_initialSurement;
+        
+        if(hilo == Z_loSurement){
+            P_surement++;
+            }
+    }
+}
+
 InterruptIn lightIn(p22);
 DigitalOut monitor(LED4);
 
+bool surementData(uint8_t p, int32_t *hiPriod, int32_t *loPriod)
+{
+    bool ans = beforeLevel == -1 ? true : false;
+    
+    *hiPriod = D_surement[p][Z_hiSurement];
+    *loPriod = D_surement[p][Z_loSurement];
+    
+    return (ans);
+    }
+
 void priodMsurementMain(void)
 {
 
@@ -33,10 +63,12 @@
     hiTimer.reset();
     if(beforeLevel == 0) {
         loCompleteTime = loTimer.read_ms();
+    surementPut(Z_loSurement, loCompleteTime);
         printf("hi = %d,  lo = %d\r\n",hiCompleteTime, loCompleteTime);
     }
     if(beforeLevel == -1) {
         printf("start\r\n");
+    surementPut(Z_initialSurement, (int32_t)Z_initialSurement);
     }
     beforeLevel = 1;
     monitor = 1;
@@ -47,6 +79,7 @@
     loTimer.reset();
     if(beforeLevel == 1) {
         hiCompleteTime = hiTimer.read_ms();
+    surementPut(Z_hiSurement, hiCompleteTime);
     }
     beforeLevel = 0;
     monitor = 0;