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

Dependencies:   AQM0802A DigitalSw mbed

Committer:
suupen
Date:
Thu Jun 08 04:46:15 2017 +0000
Revision:
5:f137bb7eeda6
Parent:
4:001603e48dc8
???;

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