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

Dependencies:   AQM0802A DigitalSw mbed

Committer:
suupen
Date:
Mon Jun 05 12:31:15 2017 +0000
Revision:
3:2a8fdcc54c95
Parent:
2:f22110fb3925
Child:
4:001603e48dc8
LCD????????????

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