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

Dependencies:   AQM0802A DigitalSw mbed

Revision:
2:f22110fb3925
Parent:
1:d4291fd3a94c
Child:
3:2a8fdcc54c95
--- a/priodMsurement.cpp	Sat May 20 12:23:42 2017 +0000
+++ b/priodMsurement.cpp	Sat May 27 08:20:20 2017 +0000
@@ -2,90 +2,79 @@
 #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 timer;
-uint16_t onTime;
-uint16_t offTime;
-int8_t beforeLevel; // 0:Lo 1:Hi -1:timeOut(non Pluse)
+Timer hiTimer;  // hi priod timer
+Timer loTimer; // low priod timer
+Timer aTimer;
+
+Ticker checkTicker;
+
+int32_t hiCompleteTime;    // 1/1 [ms]/count
+int32_t loCompleteTime;
+
+int8_t beforeLevel = -1; // 0:Lo 1:Hi -1:timeOut(non Pluse)
 
 InterruptIn lightIn(p22);
 DigitalOut monitor(LED4);
 
 void priodMsurementMain(void)
 {
-    if((timer.read_ms() > Z_nonSignalTime) && (beforeLevel != -1)){
-        printf("end \r\n");
-        timer.reset();
-        beforeLevel = -1;
-        }
-}
 
-void ledOn(void)
-{
-    monitor = 1;
-
-    switch(beforeLevel) {
-        case 0:
-            offTime = timer.read_ms();
-            timer.reset();
-
-            printf(" off = %d\r\n\r\n",offTime);
-
-            lcd.cls();
-            lcd.printf("on %d off %d",onTime, offTime);
-
-            break;
-        case -1:
-        case 1:
-        default:
-            timer.reset();
-            printf("start: off to on\r\n");
-            break;
-
-    }
-    beforeLevel = 1;
 
 }
 
-void ledOff(void)
+void hiEdge(void)
 {
-    monitor = 0;
+    hiTimer.reset();
+    if(beforeLevel == 0) {
+        loCompleteTime = loTimer.read_ms();
+        printf("hi = %d,  lo = %d\r\n",hiCompleteTime, loCompleteTime);
+    }
+    if(beforeLevel == -1) {
+        printf("start\r\n");
+    }
+    beforeLevel = 1;
+    monitor = 1;
+}
 
-    switch(beforeLevel) {
-        case 1:
-            onTime = timer.read_ms();
-            if(onTime > Z_offNonDetectTime){
-            timer.reset();
-            printf(" on = %d\r\n",onTime);
-            /*
-                        lcd.cls();
-                        lcd.printf("on %d off %d",onTime, offTime);
-            */
-            }
-            else{
-                // noise or dinamic output have a chancel.
-                }
-            break;
-        case -1:
-        case 0:
-        default:
-            timer.reset();
-            printf("start: on to off\r\n");
-            break;
-
+void loEdge(void)
+{
+    loTimer.reset();
+    if(beforeLevel == 1) {
+        hiCompleteTime = hiTimer.read_ms();
     }
     beforeLevel = 0;
+    monitor = 0;
+}
 
+void pulseCheck(void)
+{
+    int32_t lo = loTimer.read_ms();
+    int32_t hi = hiTimer.read_ms();
+
+    if((lo > Z_nonSignalTime) && (beforeLevel == 0)) {
+        // pulse end
+        beforeLevel = -1;
+
+        printf("hi = %d,  lo = --\r\n",hiCompleteTime);
+        printf("end\r\n");
+    }
 
 
 }
 
 void priodMsurementInitalize(void)
 {
-    timer.start();
+    aTimer.start();
+    hiTimer.start();
+    loTimer.start();
+    checkTicker.attach_us(&pulseCheck, 1000);
 
-    lightIn.rise(&ledOn);
-    lightIn.fall(&ledOff);
+    lightIn.rise(&hiEdge);
+    lightIn.fall(&loEdge);
 }