Waveform display for input signal using SAI from MEMS microphone or line. MEMS マイクまたはラインから SAI により入力した信号の波形を表示する.
Dependencies: BSP_DISCO_F746NG F746_GUI F746_SAI_IO LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp@4:bf927b50098b, 2017-03-17 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Mar 17 01:55:12 2017 +0000
- Revision:
- 4:bf927b50098b
- Parent:
- 3:b16250c9593c
- Child:
- 5:92bb7f2bf714
5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:e2c6c8630aab | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:e2c6c8630aab | 2 | // MEMS マイクまたはラインから CODEC を使って入力した信号の波形の表示 |
MikamiUitOpen | 0:e2c6c8630aab | 3 | // 標本化周波数: 16 kHz |
MikamiUitOpen | 0:e2c6c8630aab | 4 | // |
MikamiUitOpen | 2:afff5ec35233 | 5 | // mbed ライブラリはリビジョン 131 またはそれ以前のものを使うこと |
MikamiUitOpen | 2:afff5ec35233 | 6 | // |
MikamiUitOpen | 4:bf927b50098b | 7 | // 2017/03/17, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:e2c6c8630aab | 8 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:e2c6c8630aab | 9 | |
MikamiUitOpen | 0:e2c6c8630aab | 10 | #include "F746_GUI.hpp" |
MikamiUitOpen | 0:e2c6c8630aab | 11 | #include "SAI_InOut.hpp" |
MikamiUitOpen | 0:e2c6c8630aab | 12 | #include "WaveformDisplay.hpp" |
MikamiUitOpen | 0:e2c6c8630aab | 13 | #include "Trigger.hpp" |
MikamiUitOpen | 0:e2c6c8630aab | 14 | |
MikamiUitOpen | 0:e2c6c8630aab | 15 | int main() |
MikamiUitOpen | 0:e2c6c8630aab | 16 | { |
MikamiUitOpen | 0:e2c6c8630aab | 17 | const uint32_t BACK_COLOR = GuiBase::ENUM_BACK; |
MikamiUitOpen | 0:e2c6c8630aab | 18 | const uint32_t AXIS_COLOR = 0xFFCCFFFF; |
MikamiUitOpen | 0:e2c6c8630aab | 19 | const uint32_t LINE_COLOR = LCD_COLOR_CYAN; |
MikamiUitOpen | 0:e2c6c8630aab | 20 | |
MikamiUitOpen | 2:afff5ec35233 | 21 | const uint32_t N_DATA_SAI = 600; // SAI で使うデータ数 |
MikamiUitOpen | 2:afff5ec35233 | 22 | const uint32_t N_DATA = N_DATA_SAI*2/3; // 表示するデータ数 |
MikamiUitOpen | 4:bf927b50098b | 23 | SaiIO mySai(SaiIO::INPUT, N_DATA_SAI, AUDIO_FREQUENCY_16K, |
MikamiUitOpen | 0:e2c6c8630aab | 24 | INPUT_DEVICE_DIGITAL_MICROPHONE_2); |
MikamiUitOpen | 2:afff5ec35233 | 25 | |
MikamiUitOpen | 4:bf927b50098b | 26 | LCD_DISCO_F746NG &lcd = GuiBase::GetLcd(); |
MikamiUitOpen | 4:bf927b50098b | 27 | lcd.Clear(BACK_COLOR); |
MikamiUitOpen | 0:e2c6c8630aab | 28 | |
MikamiUitOpen | 3:b16250c9593c | 29 | Label labelTitle(240, 10, "Simplified Oscilloscope", |
MikamiUitOpen | 0:e2c6c8630aab | 30 | Label::CENTER, Font16); |
MikamiUitOpen | 2:afff5ec35233 | 31 | Label labelTrigg(20, 250); |
MikamiUitOpen | 0:e2c6c8630aab | 32 | |
MikamiUitOpen | 0:e2c6c8630aab | 33 | const uint16_t B_LEFT = 240; |
MikamiUitOpen | 0:e2c6c8630aab | 34 | const uint16_t B_TOP = 235; |
MikamiUitOpen | 0:e2c6c8630aab | 35 | const uint16_t B_WIDTH = 55; |
MikamiUitOpen | 0:e2c6c8630aab | 36 | const uint16_t B_HEIGHT = 35; |
MikamiUitOpen | 0:e2c6c8630aab | 37 | |
MikamiUitOpen | 0:e2c6c8630aab | 38 | ButtonGroup inputSw(B_LEFT, B_TOP, B_WIDTH, B_HEIGHT, |
MikamiUitOpen | 0:e2c6c8630aab | 39 | 2, (string[]){"MIC", "LINE"}, 0, 0, 2, 0); |
MikamiUitOpen | 0:e2c6c8630aab | 40 | |
MikamiUitOpen | 0:e2c6c8630aab | 41 | ButtonGroup runStop(B_LEFT+B_WIDTH*2+10, B_TOP, B_WIDTH, B_HEIGHT, |
MikamiUitOpen | 0:e2c6c8630aab | 42 | 2, (string[]){"RUN", "STOP"}, 0, 0, 2, 0); |
MikamiUitOpen | 0:e2c6c8630aab | 43 | |
MikamiUitOpen | 0:e2c6c8630aab | 44 | const int X_WAV = 30; // x 方向の原点 |
MikamiUitOpen | 0:e2c6c8630aab | 45 | const int Y_WAV = 100; // y 方向の原点(上部に表示される波形) |
MikamiUitOpen | 0:e2c6c8630aab | 46 | Array<int16_t> xnL(N_DATA), xnR(N_DATA); // 表示で使うデータ |
MikamiUitOpen | 0:e2c6c8630aab | 47 | WaveformDisplay waveDispL(lcd, X_WAV, Y_WAV, xnL, 7, |
MikamiUitOpen | 0:e2c6c8630aab | 48 | AXIS_COLOR, LINE_COLOR, BACK_COLOR); |
MikamiUitOpen | 0:e2c6c8630aab | 49 | WaveformDisplay waveDispR(lcd, X_WAV, Y_WAV+80, xnR, 7, |
MikamiUitOpen | 0:e2c6c8630aab | 50 | AXIS_COLOR, LINE_COLOR, BACK_COLOR); |
MikamiUitOpen | 0:e2c6c8630aab | 51 | Label labelL(445, Y_WAV- 8, "L", Label::LEFT, Font16); |
MikamiUitOpen | 0:e2c6c8630aab | 52 | Label labelR(445, Y_WAV+72, "R", Label::LEFT, Font16); |
MikamiUitOpen | 0:e2c6c8630aab | 53 | |
MikamiUitOpen | 0:e2c6c8630aab | 54 | Array<int16_t> snL(N_DATA_SAI), snR(N_DATA_SAI); |
MikamiUitOpen | 0:e2c6c8630aab | 55 | Trigger myTrigger(snL, snR, xnL, xnR, 64); |
MikamiUitOpen | 0:e2c6c8630aab | 56 | int inSelect = 0; // 初期値:入力デバイスをマイクにする |
MikamiUitOpen | 0:e2c6c8630aab | 57 | |
MikamiUitOpen | 0:e2c6c8630aab | 58 | mySai.RecordIn(); // 入力開始 |
MikamiUitOpen | 0:e2c6c8630aab | 59 | bool run = true; // 入力実行中 |
MikamiUitOpen | 0:e2c6c8630aab | 60 | |
MikamiUitOpen | 0:e2c6c8630aab | 61 | while (true) |
MikamiUitOpen | 0:e2c6c8630aab | 62 | { |
MikamiUitOpen | 0:e2c6c8630aab | 63 | int sw = 0; |
MikamiUitOpen | 0:e2c6c8630aab | 64 | if (runStop.GetTouchedNumber(sw)) |
MikamiUitOpen | 0:e2c6c8630aab | 65 | { |
MikamiUitOpen | 0:e2c6c8630aab | 66 | bool on = (sw == 0) ? true : false; |
MikamiUitOpen | 0:e2c6c8630aab | 67 | if (on && !run) mySai.ResumeIn(); // 入力再開 |
MikamiUitOpen | 0:e2c6c8630aab | 68 | if (!on && run) mySai.PauseIn(); // 入力中断 |
MikamiUitOpen | 0:e2c6c8630aab | 69 | run = on; |
MikamiUitOpen | 0:e2c6c8630aab | 70 | } |
MikamiUitOpen | 0:e2c6c8630aab | 71 | |
MikamiUitOpen | 0:e2c6c8630aab | 72 | int swNow; |
MikamiUitOpen | 0:e2c6c8630aab | 73 | if (inputSw.GetTouchedNumber(swNow) && (swNow != inSelect)) |
MikamiUitOpen | 0:e2c6c8630aab | 74 | { |
MikamiUitOpen | 2:afff5ec35233 | 75 | mySai.SwitchInputDevice(swNow); // 入力デバイスの設定 |
MikamiUitOpen | 0:e2c6c8630aab | 76 | inSelect = swNow; |
MikamiUitOpen | 0:e2c6c8630aab | 77 | } |
MikamiUitOpen | 0:e2c6c8630aab | 78 | |
MikamiUitOpen | 0:e2c6c8630aab | 79 | if (mySai.IsCaptured()) // 入力データがそろってから波形を表示する |
MikamiUitOpen | 0:e2c6c8630aab | 80 | { |
MikamiUitOpen | 0:e2c6c8630aab | 81 | for (int n=0; n<N_DATA_SAI; n++) |
MikamiUitOpen | 0:e2c6c8630aab | 82 | mySai.Input(snL[n], snR[n]); |
MikamiUitOpen | 0:e2c6c8630aab | 83 | |
MikamiUitOpen | 0:e2c6c8630aab | 84 | bool trigg = myTrigger.Execute(); // トリガと同等の操作 |
MikamiUitOpen | 2:afff5ec35233 | 85 | |
MikamiUitOpen | 0:e2c6c8630aab | 86 | if (trigg) labelTrigg.Draw("Triggered"); |
MikamiUitOpen | 0:e2c6c8630aab | 87 | else labelTrigg.Draw("Not Triggered"); |
MikamiUitOpen | 2:afff5ec35233 | 88 | |
MikamiUitOpen | 0:e2c6c8630aab | 89 | waveDispL.Execute(); // 左チャンネルの波形表示 |
MikamiUitOpen | 0:e2c6c8630aab | 90 | waveDispR.Execute(); // 右チャンネルの波形表示 |
MikamiUitOpen | 0:e2c6c8630aab | 91 | } |
MikamiUitOpen | 0:e2c6c8630aab | 92 | } |
MikamiUitOpen | 0:e2c6c8630aab | 93 | } |