筋電センサプログラム

Dependencies:   mbed-rtos mbed

筋電

Committer:
dhpt
Date:
Sat Jan 21 07:37:48 2017 +0000
Revision:
1:91d6b2ee7a2e
Parent:
0:42ab58db8182
Child:
2:9a7f77850970
??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dhpt 0:42ab58db8182 1 /*** Include ***/
dhpt 0:42ab58db8182 2 #include "mbed.h"
dhpt 0:42ab58db8182 3 #include "rtos.h"
dhpt 0:42ab58db8182 4
dhpt 0:42ab58db8182 5 #include "typedef.h"
dhpt 0:42ab58db8182 6
dhpt 0:42ab58db8182 7 /*** Define ***/
dhpt 0:42ab58db8182 8 #define ON (1)
dhpt 0:42ab58db8182 9 #define OFF (0)
dhpt 0:42ab58db8182 10
dhpt 1:91d6b2ee7a2e 11 #define SAMPLING_RATE (1) /* A/D sampling rate (1kHz) */
dhpt 0:42ab58db8182 12 #define MAINCYCLE 200 /* [ms] */
dhpt 0:42ab58db8182 13
dhpt 1:91d6b2ee7a2e 14 #define DEBUG
dhpt 1:91d6b2ee7a2e 15
dhpt 0:42ab58db8182 16 /*** Global Variable ***/
dhpt 1:91d6b2ee7a2e 17 DigitalOut myled1(LED1); /* 起動確認用 */
dhpt 1:91d6b2ee7a2e 18 DigitalOut myled2(LED2); /* 割り込み確認用 */
dhpt 1:91d6b2ee7a2e 19 DigitalOut myled3(LED3); /* 休止状態確認用 */
dhpt 0:42ab58db8182 20 Ticker sampling; /* Interval timer for A/D sampling */
dhpt 0:42ab58db8182 21 AnalogIn wave_in(p20); /* Waveform input */
dhpt 0:42ab58db8182 22 Serial pc(USBTX, USBRX); /* tx, rx */
dhpt 0:42ab58db8182 23 Timer timer;
dhpt 0:42ab58db8182 24
dhpt 0:42ab58db8182 25 UINT32 g_sendFlg;
dhpt 1:91d6b2ee7a2e 26 FLT32 g_wave;
dhpt 1:91d6b2ee7a2e 27
dhpt 1:91d6b2ee7a2e 28 UINT32 g_adCnt;
dhpt 1:91d6b2ee7a2e 29
dhpt 0:42ab58db8182 30
dhpt 0:42ab58db8182 31 /*** Functions ***/
dhpt 0:42ab58db8182 32 /* A/D変換割り込み */
dhpt 0:42ab58db8182 33 void ad_sampling(){
dhpt 1:91d6b2ee7a2e 34 static INT32 i = 0;
dhpt 1:91d6b2ee7a2e 35 /* 割り込み中点灯 */
dhpt 1:91d6b2ee7a2e 36 myled2 = 1;
dhpt 1:91d6b2ee7a2e 37 g_adCnt++;
dhpt 1:91d6b2ee7a2e 38 g_wave = wave_in.read() * 3.3; /*[V] */
dhpt 1:91d6b2ee7a2e 39 #ifdef DEBUG_
dhpt 0:42ab58db8182 40 i++;
dhpt 1:91d6b2ee7a2e 41 pc.printf("attach: %d,%d\r\n", i, g_adCnt);
dhpt 1:91d6b2ee7a2e 42 g_wave = i / 100 * 3.3;
dhpt 1:91d6b2ee7a2e 43 g_wave = g_adCnt * 3.3;
dhpt 1:91d6b2ee7a2e 44 if(i > 100) i = 0;
dhpt 1:91d6b2ee7a2e 45 #endif
dhpt 1:91d6b2ee7a2e 46 wait(0.01);
dhpt 0:42ab58db8182 47 /* A/D変換完了後送信 */
dhpt 0:42ab58db8182 48 g_sendFlg = 1;
dhpt 1:91d6b2ee7a2e 49 myled2 = 0;
dhpt 0:42ab58db8182 50 }
dhpt 0:42ab58db8182 51
dhpt 0:42ab58db8182 52
dhpt 0:42ab58db8182 53 INT32 main() {
dhpt 0:42ab58db8182 54 INT32 i = 0;
dhpt 0:42ab58db8182 55 DBL64 st = 0;
dhpt 0:42ab58db8182 56 DBL64 et = 0;
dhpt 1:91d6b2ee7a2e 57 myled1 = 1;
dhpt 0:42ab58db8182 58
dhpt 1:91d6b2ee7a2e 59 /* A/D変換対タイマ割り込み開始 */
dhpt 1:91d6b2ee7a2e 60 myled2 = 1;
dhpt 0:42ab58db8182 61 /* Start interval timer */
dhpt 0:42ab58db8182 62 sampling.attach(&ad_sampling, SAMPLING_RATE);
dhpt 1:91d6b2ee7a2e 63 myled2 = 0;
dhpt 0:42ab58db8182 64
dhpt 0:42ab58db8182 65 while(1) {
dhpt 0:42ab58db8182 66 /* timer read */
dhpt 0:42ab58db8182 67 st = timer.read_ms();
dhpt 1:91d6b2ee7a2e 68 myled3 = 0;
dhpt 0:42ab58db8182 69
dhpt 0:42ab58db8182 70 /* メイン処理 */
dhpt 1:91d6b2ee7a2e 71 myled1 = !myled1;
dhpt 0:42ab58db8182 72 i++;
dhpt 0:42ab58db8182 73
dhpt 0:42ab58db8182 74 /* データ送信判定 */
dhpt 0:42ab58db8182 75 if(g_sendFlg == 1) {
dhpt 0:42ab58db8182 76 /* データ送信 */
dhpt 0:42ab58db8182 77 i++;
dhpt 1:91d6b2ee7a2e 78 #ifdef DEBUG
dhpt 1:91d6b2ee7a2e 79 pc.printf("cnt: %d, ad cnt: %d, wave: %f\r\n", i, g_adCnt, g_wave);
dhpt 1:91d6b2ee7a2e 80 #endif
dhpt 0:42ab58db8182 81
dhpt 0:42ab58db8182 82 /* フラグリセット */
dhpt 0:42ab58db8182 83 g_sendFlg = 0;
dhpt 0:42ab58db8182 84 }
dhpt 0:42ab58db8182 85
dhpt 0:42ab58db8182 86 /* timer read */
dhpt 0:42ab58db8182 87 et = timer.read_ms();
dhpt 0:42ab58db8182 88 /* 制御周期まで待機 */
dhpt 0:42ab58db8182 89 Thread::wait((uint32_t)(MAINCYCLE - (et - st)));
dhpt 0:42ab58db8182 90 }
dhpt 0:42ab58db8182 91 }