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

Dependencies:   AQM0802A DigitalSw mbed

Committer:
suupen
Date:
Tue Jun 06 13:15:07 2017 +0000
Revision:
4:001603e48dc8
Parent:
3:2a8fdcc54c95
Child:
5:f137bb7eeda6
??????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 1:d4291fd3a94c 1 #include "mbed.h"
suupen 1:d4291fd3a94c 2 #include "priodMsurement.h"
suupen 1:d4291fd3a94c 3
suupen 2:f22110fb3925 4 DigitalOut dbgPort (p19);
suupen 2:f22110fb3925 5 DigitalOut dbg2Port (p18);
suupen 2:f22110fb3925 6
suupen 1:d4291fd3a94c 7
suupen 2:f22110fb3925 8 Timer hiTimer; // hi priod timer
suupen 2:f22110fb3925 9 Timer loTimer; // low priod timer
suupen 2:f22110fb3925 10 Timer aTimer;
suupen 2:f22110fb3925 11
suupen 2:f22110fb3925 12 Ticker checkTicker;
suupen 2:f22110fb3925 13
suupen 2:f22110fb3925 14 int32_t hiCompleteTime; // 1/1 [ms]/count
suupen 2:f22110fb3925 15 int32_t loCompleteTime;
suupen 2:f22110fb3925 16
suupen 4:001603e48dc8 17
suupen 3:2a8fdcc54c95 18 int32_t D_surement[50][2]; // LCD表示用測定値保管
suupen 4:001603e48dc8 19 int8_t P_surement = 0; // D_surement[ここ][] のポインタ
suupen 3:2a8fdcc54c95 20 #define Z_nonSurement (-1) // D_surementの最終位置(不定値)
suupen 3:2a8fdcc54c95 21
suupen 2:f22110fb3925 22 int8_t beforeLevel = -1; // 0:Lo 1:Hi -1:timeOut(non Pluse)
suupen 1:d4291fd3a94c 23
suupen 3:2a8fdcc54c95 24 #define Z_initialSurement (-1)// surementPut()への初期化指示
suupen 3:2a8fdcc54c95 25 #define Z_hiSurement (0) // surementPut()へのON時間記憶指示
suupen 3:2a8fdcc54c95 26 #define Z_loSurement (1) // surementPut()へのOFF時間記憶指示
suupen 3:2a8fdcc54c95 27 void surementPut(int8_t hilo, int32_t surement)
suupen 3:2a8fdcc54c95 28 {
suupen 3:2a8fdcc54c95 29 if(hilo == Z_initialSurement) {
suupen 3:2a8fdcc54c95 30 P_surement = 0;
suupen 3:2a8fdcc54c95 31 D_surement[P_surement][Z_hiSurement] = (int32_t)Z_initialSurement;
suupen 3:2a8fdcc54c95 32 D_surement[P_surement][Z_loSurement] = (int32_t)Z_initialSurement;
suupen 3:2a8fdcc54c95 33 } else {
suupen 3:2a8fdcc54c95 34 D_surement[P_surement][hilo] = surement;
suupen 3:2a8fdcc54c95 35 D_surement[P_surement + 1][hilo] = (int32_t)Z_initialSurement;
suupen 4:001603e48dc8 36
suupen 4:001603e48dc8 37 if(hilo == Z_loSurement) {
suupen 3:2a8fdcc54c95 38 P_surement++;
suupen 4:001603e48dc8 39 }
suupen 3:2a8fdcc54c95 40 }
suupen 3:2a8fdcc54c95 41 }
suupen 3:2a8fdcc54c95 42
suupen 1:d4291fd3a94c 43 InterruptIn lightIn(p22);
suupen 1:d4291fd3a94c 44 DigitalOut monitor(LED4);
suupen 4:001603e48dc8 45 bool surementData(int8_t *p, int32_t *hiPriod, int32_t *loPriod)
suupen 3:2a8fdcc54c95 46 {
suupen 3:2a8fdcc54c95 47 bool ans = beforeLevel == -1 ? true : false;
suupen 4:001603e48dc8 48 if(ans == false) {
suupen 4:001603e48dc8 49 *p = P_surement;
suupen 4:001603e48dc8 50 }
suupen 4:001603e48dc8 51 *hiPriod = D_surement[*p][Z_hiSurement];
suupen 4:001603e48dc8 52 *loPriod = D_surement[*p][Z_loSurement];
suupen 4:001603e48dc8 53
suupen 3:2a8fdcc54c95 54 return (ans);
suupen 4:001603e48dc8 55 }
suupen 3:2a8fdcc54c95 56
suupen 1:d4291fd3a94c 57 void priodMsurementMain(void)
suupen 1:d4291fd3a94c 58 {
suupen 1:d4291fd3a94c 59
suupen 1:d4291fd3a94c 60
suupen 1:d4291fd3a94c 61 }
suupen 1:d4291fd3a94c 62
suupen 2:f22110fb3925 63 void hiEdge(void)
suupen 1:d4291fd3a94c 64 {
suupen 2:f22110fb3925 65 hiTimer.reset();
suupen 2:f22110fb3925 66 if(beforeLevel == 0) {
suupen 2:f22110fb3925 67 loCompleteTime = loTimer.read_ms();
suupen 4:001603e48dc8 68 surementPut(Z_loSurement, loCompleteTime);
suupen 4:001603e48dc8 69 beforeLevel = 1;
suupen 2:f22110fb3925 70 printf("hi = %d, lo = %d\r\n",hiCompleteTime, loCompleteTime);
suupen 2:f22110fb3925 71 }
suupen 2:f22110fb3925 72 if(beforeLevel == -1) {
suupen 4:001603e48dc8 73 // if((beforeLevel == -1) && (F_start == true)) {
suupen 2:f22110fb3925 74 printf("start\r\n");
suupen 4:001603e48dc8 75 surementPut(Z_initialSurement, (int32_t)Z_initialSurement);
suupen 4:001603e48dc8 76 beforeLevel = 1;
suupen 2:f22110fb3925 77 }
suupen 2:f22110fb3925 78 monitor = 1;
suupen 2:f22110fb3925 79 }
suupen 1:d4291fd3a94c 80
suupen 2:f22110fb3925 81 void loEdge(void)
suupen 2:f22110fb3925 82 {
suupen 2:f22110fb3925 83 loTimer.reset();
suupen 2:f22110fb3925 84 if(beforeLevel == 1) {
suupen 2:f22110fb3925 85 hiCompleteTime = hiTimer.read_ms();
suupen 4:001603e48dc8 86 surementPut(Z_hiSurement, hiCompleteTime);
suupen 1:d4291fd3a94c 87 }
suupen 1:d4291fd3a94c 88 beforeLevel = 0;
suupen 2:f22110fb3925 89 monitor = 0;
suupen 2:f22110fb3925 90 }
suupen 1:d4291fd3a94c 91
suupen 2:f22110fb3925 92 void pulseCheck(void)
suupen 2:f22110fb3925 93 {
suupen 2:f22110fb3925 94 int32_t lo = loTimer.read_ms();
suupen 2:f22110fb3925 95 int32_t hi = hiTimer.read_ms();
suupen 2:f22110fb3925 96
suupen 2:f22110fb3925 97 if((lo > Z_nonSignalTime) && (beforeLevel == 0)) {
suupen 2:f22110fb3925 98 // pulse end
suupen 2:f22110fb3925 99 beforeLevel = -1;
suupen 2:f22110fb3925 100
suupen 2:f22110fb3925 101 printf("hi = %d, lo = --\r\n",hiCompleteTime);
suupen 2:f22110fb3925 102 printf("end\r\n");
suupen 2:f22110fb3925 103 }
suupen 1:d4291fd3a94c 104
suupen 1:d4291fd3a94c 105
suupen 1:d4291fd3a94c 106 }
suupen 1:d4291fd3a94c 107
suupen 1:d4291fd3a94c 108 void priodMsurementInitalize(void)
suupen 1:d4291fd3a94c 109 {
suupen 2:f22110fb3925 110 aTimer.start();
suupen 2:f22110fb3925 111 hiTimer.start();
suupen 2:f22110fb3925 112 loTimer.start();
suupen 2:f22110fb3925 113 checkTicker.attach_us(&pulseCheck, 1000);
suupen 1:d4291fd3a94c 114
suupen 2:f22110fb3925 115 lightIn.rise(&hiEdge);
suupen 2:f22110fb3925 116 lightIn.fall(&loEdge);
suupen 1:d4291fd3a94c 117 }