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

Dependencies:   AQM0802A DigitalSw mbed

Files at this revision

API Documentation at this revision

Comitter:
suupen
Date:
Sat May 20 12:23:42 2017 +0000
Parent:
0:c5384fa0fc28
Child:
2:f22110fb3925
Commit message:
????????????????????????????????;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
priodMsurement.cpp Show annotated file Show diff for this revision Revisions of this file
priodMsurement.h Show annotated file Show diff for this revision Revisions of this file
testLed.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat May 20 01:33:48 2017 +0000
+++ b/main.cpp	Sat May 20 12:23:42 2017 +0000
@@ -1,78 +1,28 @@
 #include "mbed.h"
-#include <AQM0802A.h>
 #include "testLed.h"
+#include "priodMsurement.h"
 
-I2C i2c(p28, p27);
-AQM0802A lcd(i2c);    // if 5.0v supply, (i2c, false);
 
 //DigitalOut myled1(LED1);
 DigitalOut myled2(LED2);
-DigitalOut myled3(LED3);
-DigitalOut myled4(LED4);
-
-Timer timer;
-uint16_t onTime;
-uint16_t offTime;
+//DigitalOut myled3(LED3);
+//DigitalOut myled4(LED4);
 
-Ticker tickerLed1;
-Ticker tickerLed2;
+DigitalIn demoLedSw(p20, PullUp);
 
-InterruptIn lightIn(p16);
-
-void ledOn(void)
-{
-//    myled4 = 1;
 
-    offTime = timer.read_ms();
-    timer.reset();
-        lcd.cls();
-    lcd.printf("on %d off %d",onTime, offTime);
+int main()
+{
+    testLedInitalize();
+    priodMsurementInitalize();
 
-    }
 
-void ledOff(void)
-{
- //   myled4 = 0;
+    testLedMain(true);
 
-    onTime = timer.read_ms();
-    timer.reset();
-        lcd.cls();
-    lcd.printf("on %d off %d",onTime, offTime);
-
+    while(1) {
+        testLedMain(!demoLedSw);
+    priodMsurementMain();
 
     }
-
-void outputLed1(void)
-{
-//    myled1 = !myled1;
-    }
-
-void outputLed2(void)
-{
-    myled4 = !myled4;
-    }
-
-int main() {
-        testLedInitalize();
-        
-        lcd.cls();
-//    lcd.printf("iter: \r\n");
-    lcd.printf("test");
     
-    timer.start();
-
-    lightIn.rise(&ledOn);
-    lightIn.fall(&ledOff);
- 
-    tickerLed1.attach(&outputLed1, 0.1);
-    tickerLed2.attach(&outputLed2, 0.5);
-
-
-        testLedMain(true);
-     
-    while(1) {
-        testLedMain(false);
-  //      myled3 =lightIn;
-
-    }
 }
--- a/priodMsurement.cpp	Sat May 20 01:33:48 2017 +0000
+++ b/priodMsurement.cpp	Sat May 20 12:23:42 2017 +0000
@@ -0,0 +1,91 @@
+#include "mbed.h"
+#include <AQM0802A.h>
+#include "priodMsurement.h"
+
+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)
+
+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)
+{
+    monitor = 0;
+
+    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;
+
+    }
+    beforeLevel = 0;
+
+
+
+}
+
+void priodMsurementInitalize(void)
+{
+    timer.start();
+
+    lightIn.rise(&ledOn);
+    lightIn.fall(&ledOff);
+}
--- a/priodMsurement.h	Sat May 20 01:33:48 2017 +0000
+++ b/priodMsurement.h	Sat May 20 12:23:42 2017 +0000
@@ -0,0 +1,13 @@
+#ifndef PRIODMSUREMENT_H
+#define PRIODMSUREMENT_H
+
+#define Z_nonSignalTime (5000) // (1/1 [ms]/count)
+#define Z_offNonDetectTime (10) // (1/1 [ms]/count)
+
+/** Initalize
+ */
+void priodMsurementInitalize(void);
+void priodMsurementMain(void);
+
+
+#endif // PRIODMSUREMENT_H
\ No newline at end of file
--- a/testLed.cpp	Sat May 20 01:33:48 2017 +0000
+++ b/testLed.cpp	Sat May 20 12:23:42 2017 +0000
@@ -1,125 +1,96 @@
 #include "mbed.h"
 #include "testLed.h"
 
+void tick(void);
+Ticker ticker;
+DigitalOut myled3(LED3);
+
 DigitalOut testLed(LED1);
 
 Timer timerTestLed;
 bool brinkRequest = false;
 
+
+
 void testLedInitalize(void)
 {
     timerTestLed.start();
     timerTestLed.reset();
     brinkRequest = false;
 
+    ticker.attach_us(&tick, 1000);
 }
 
 uint8_t brinkPosition = 0;  // brinkPattern[][ここ]
 uint16_t brinkPriod = 0;    // 点滅時間 1/1 ([ms]/count)
+bool testLedLevel = false;  // false:Off true:On
 uint32_t brinkPattern[][2] = {
-    {1,10},
-    {0,10},
-    
     {1,100},
     {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,100},
-    {0,100},
-    
-    {1,10},
-    {0,10},
-    
+
+    {1,500},
+    {0,500},
+
     {1,100},
     {0,100},
-    
-    {1,10},
-    {0,10},
-    
+
+    {1,500},
+    {0,500},
+
     {1,100},
     {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+
+    {1,500},
+    {0,500},
+
     {1,100},
     {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+
     {1,100},
     {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+
+    {1,100},
+    {0,500},
+
     {1,100},
-    {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+    {0,500},
+
     {1,100},
-    {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+    {0,500},
+
     {1,100},
-    {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+    {0,500},
+
     {1,100},
-    {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
-    {1,100},
-    {0,100},
-    
-    {1,10},
-    {0,10},
-    
-    {1,200},
-    {0,300},
-    
+    {0,500},
+
+    {1,500},
+    {0,500},
+
+
+
     {2,0}       // end
 };
 
+void tick(void)
+{
+    myled3 = !myled3;
+    if(testLedLevel == true) {
+        testLed = !testLed;
+    } else {
+        testLed = 0;
+    }
+}
+
+
+
 bool testLedMain(bool request)
 {
     if(brinkRequest == false) {
         if(request == true) {
             brinkRequest = true;
             brinkPosition = 0;
-            testLed = brinkPattern[brinkPosition][0];
+            testLedLevel = brinkPattern[brinkPosition][0];
             brinkPriod = brinkPattern[brinkPosition][1];
 
             timerTestLed.reset();
@@ -130,12 +101,12 @@
         if(timerTestLed.read_ms() > brinkPriod) {
             brinkPosition++;
             if(brinkPattern[brinkPosition][0] == 2) {
-                testLed = 0;
+                testLedLevel = 0;
                 brinkRequest = false;
             } else {
-                testLed = brinkPattern[brinkPosition][0];
+                testLedLevel = brinkPattern[brinkPosition][0];
                 brinkPriod = brinkPattern[brinkPosition][1];
-            timerTestLed.reset();
+                timerTestLed.reset();
 
             }
         }