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