daiki hiraoka
/
EMG
筋電センサプログラム
筋電
Diff: main.cpp
- Revision:
- 13:94ce8bd0c0e1
- Parent:
- 12:cbf6f5bbfbe6
--- a/main.cpp Sat Sep 23 04:37:01 2017 +0000 +++ b/main.cpp Thu Jan 04 06:30:00 2018 +0000 @@ -3,7 +3,7 @@ * FFTの1kHz以上は取れなくなる * 1kHzだとオシロでFFT見た時ぎりぎり */ - /*** Include ***/ +/*** Include ***/ #include "mbed.h" #include "rtos.h" #include "FilterTest.h" @@ -23,16 +23,14 @@ #define DEBUG #define TESTCOM */ -union u64_dataType_g -{ +union u64_dataType_g { double DData; - char CData[8]; + char CData[8]; }; -union u32_dataType_g -{ +union u32_dataType_g { float DData; - char CData[4]; + char CData[4]; }; /*** Global Variable ***/ @@ -53,7 +51,7 @@ /* 変数定義 */ uint32_t Fdiv; -double InputData = 0.0; +double InputData = 0.0; FLT32 g_cntUp; @@ -67,68 +65,68 @@ -INT32 main() { +INT32 main() +{ INT32 i = 0; INT32 cnt = 0; DBL64 st = 0; DBL64 et = 0; - u64_dataType_g sendData; + u64_dataType_g sendData; myled1 = 1; - + /* 通信初期化 */ CommInit(); /* 初期化 */ - + /* A/D変換対タイマ割り込み開始 */ myled2 = 1; /* Start interval timer */ sampling.attach(&ad_sampling, SAMPLING_RATE); myled2 = 0; - + while(1) { /* timer read */ st = timer.read_us(); myled3 = 0; - + /* メイン処理 */ if(cnt >= 1000) { - myled1 = !myled1; - cnt = 0; + myled1 = !myled1; + cnt = 0; } cnt++; i++; /* test */ //ad_sampling(); - + /* データ送信判定 */ if(g_sendFlg == 1) { /* データ送信 */ i++; - #ifdef DEBUG_ +#ifdef DEBUG_ pc.printf("### cnt: %d, ad cnt: %d, wave: %f hogehoge ###\r\n", i, g_adCnt, InputData); aout= (float)InputData; - #endif - #ifdef TESTCOM_ - pc.printf("send: %d,%lf\t\r\n", i,InputData); - #endif +#endif +#ifdef TESTCOM_ + pc.printf("send: %d,%lf\t\r\n", i,InputData); +#endif __disable_irq(); // 禁止 //InputData = 2.4; - aout= InputData / 3.3; + aout= InputData /* / 3.3*/; sendData = Communicaion(InputData,1); __enable_irq(); // 許可 /* フラグリセット */ g_sendFlg = 0; - //pc.printf("\r\nsend: %1.8lf, ", sendData.DData); - for(i=0;i<8;i++) - { - //LPC_UART0->THR =sendData.CData[i]; - #ifdef TESTCOM_ - pc.printf("%02x ", sendData.CData[i]); - #endif - } - + //pc.printf("\r\nsend: %1.8lf, ", sendData.DData); + for(i=0; i<8; i++) { + //LPC_UART0->THR =sendData.CData[i]; +#ifdef TESTCOM_ + pc.printf("%02x ", sendData.CData[i]); +#endif + } + } - + /* timer read */ et = timer.read_us(); /* 制御周期まで待機 */ @@ -138,34 +136,35 @@ } /* A/D変換割り込み */ -void ad_sampling(){ +void ad_sampling() +{ static INT32 i = 0; INT32 hpf_on, lpf_on, brf_on; /* 割り込み100回で点滅 */ if(i >= 100) { - myled2 = !myled2; - i = 0; + myled2 = !myled2; + i = 0; } i++; g_adCnt++; InputData = 0.0; InputData = InputAnalgData(); /*[V] */ - + /* filter */ hpf_on = 1; lpf_on = 1; brf_on = 0; /** !!! サンプリング周波数確認 !!! **/ /* InputData = (int32_t)filter.calc( (double)(wave_in.read_u16() - INT16_MAX), hpf_on, lpf_on, brf_on ); */ - InputData = filter.calc( InputData, hpf_on, lpf_on, brf_on ); - - - #ifdef DEBUG_ + // InputData = filter.calc( InputData, hpf_on, lpf_on, brf_on ); + + +#ifdef DEBUG_ /*pc.printf("attach: %d,%d\r\n", i, InputData);*/ g_wave = i / 100 * 3.3; g_wave = g_adCnt * 3.3; if(i > 100) i = 0; - #endif +#endif /* wait(0.01); */ /* A/D変換完了後送信 */ g_sendFlg = 1; @@ -179,68 +178,66 @@ u64_dataType_g Communicaion(double data,int byte) { - + int i; char header = 0x01; char hoge = 0x00; - u64_dataType_g sendData; + u64_dataType_g sendData; u32_dataType_g testData; /* test */ - g_cntUp = g_cntUp + 0.001; - if(g_cntUp > 1.0) g_cntUp = 0.0; + g_cntUp = g_cntUp + 0.01; + if(g_cntUp > 3.0) g_cntUp = 0.0; - sendData.DData = data; - testData.DData = (float)g_cntUp; + sendData.DData = (float)1.0; + testData.DData = (float)data; //testData.DData = (float)myled1; - + LPC_PINCON->PINSEL0 &= ~(3 << 4); LPC_PINCON->PINSEL0 |= (1 << 4); // TXD0 (01) - + LPC_SC->PCLKSEL0 &= ~(3 << 6); // PCLK_UART0 ck/4 (00) LPC_SC->PCONP |= (1 << 3); // PCUART0 - + LPC_UART0->LCR |= (1 << 7); // enable access DLAB LPC_UART0->DLL = Fdiv & 0xff; LPC_UART0->DLM = (Fdiv >> 8) & 0xff; LPC_UART0->LCR &= ~(1 << 7); // disable access DLAB - + LPC_UART0->LCR |= (3 << 0); // 8bit LPC_UART0->FCR = (7 << 0); // RX1char(00), FIFO reset LPC_UART0->IER = (1 << 0); // RBR - + /* send header */ LPC_UART0->THR = header; - for(i=0;i<4;i++) - { - // LPC_UART0->THR =sendData.CData[i]; - LPC_UART0->THR =testData.CData[i]; - #ifdef TESTCOM_ - pc.printf("send: %d,%lf\r\n", i,sendData.CData[i]); - #endif + for(i=0; i<4; i++) { + //LPC_UART0->THR =sendData.CData[i]; + LPC_UART0->THR =testData.CData[i]; +#ifdef TESTCOM_ + pc.printf("send: %d,%lf\r\n", i,sendData.CData[i]); +#endif } - for(i=0;i<3;i++) - { + for(i=0; i<3; i++) { LPC_UART0->THR = hoge; } - + NVIC_EnableIRQ(UART0_IRQn); - wait_us(100); + wait_us(100); return sendData; } -double InputAnalgData() /* A/D 読み取り */ +double InputAnalgData() /* A/D 読み取り */ { - double Result = 0.0; - - Result = (double)wave_in.read()*3.3; - /* 1 2 3 4 5 6 7 8 */ - // Result = 0x0123456789ABCDEF; - // Result = 2.0; - Result += 0.001; - if(Result > 3) Result = 0; - /*aout= Result / 3.3;*/ - //wait_us(100); - return Result; + double Result = 0.0; + + Result = (double)wave_in.read() *3.3; + /* 1 2 3 4 5 6 7 8 */ + // Result = 0x0123456789ABCDEF; + // Result = 2.0; + //Result += 1; + //if(Result > 3) Result = 0; + /*aout= Result / 3.3;*/ + //wait_us(100); + return Result; }