Simplified oscilloscope using DISCO-F746. Input: MEMS microphone. DISCO-F746 による簡易オシロスコープ.入力:MEMS マイク.
Dependencies: F746_GUI F746_SAI_IO mbed
main.cpp@0:5acef847513d, 2017-01-24 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Tue Jan 24 00:00:07 2017 +0000
- Revision:
- 0:5acef847513d
- Child:
- 1:a53d220362d4
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:5acef847513d | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:5acef847513d | 2 | // MEMS マイクから CODEC を使って入力したサウンド信号の波形の表示 |
MikamiUitOpen | 0:5acef847513d | 3 | // 標本化周波数: 16 kHz |
MikamiUitOpen | 0:5acef847513d | 4 | // |
MikamiUitOpen | 0:5acef847513d | 5 | // ライブラリのリビジョン: |
MikamiUitOpen | 0:5acef847513d | 6 | // BSP_DISCO_F746NG rev.5 |
MikamiUitOpen | 0:5acef847513d | 7 | // mbed rev.131 |
MikamiUitOpen | 0:5acef847513d | 8 | // |
MikamiUitOpen | 0:5acef847513d | 9 | // 2017/01/23, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:5acef847513d | 10 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:5acef847513d | 11 | |
MikamiUitOpen | 0:5acef847513d | 12 | #include "mbed.h" |
MikamiUitOpen | 0:5acef847513d | 13 | #include "SAI_InOut.hpp" // 筆者の作った SAI 用ライブラリ |
MikamiUitOpen | 0:5acef847513d | 14 | #include "WaveformDisplay.hpp" // 今回作った波形表示用ライブラリ |
MikamiUitOpen | 0:5acef847513d | 15 | #include "MyButton.hpp" // 今回作った「ボタン」用ライブラリ |
MikamiUitOpen | 0:5acef847513d | 16 | using namespace Mikami; // 筆者の作ったライブラリで使っている名前空間 |
MikamiUitOpen | 0:5acef847513d | 17 | |
MikamiUitOpen | 0:5acef847513d | 18 | int main() |
MikamiUitOpen | 0:5acef847513d | 19 | { |
MikamiUitOpen | 0:5acef847513d | 20 | LCD_DISCO_F746NG lcd; // LCD のオブジェクト生成 |
MikamiUitOpen | 0:5acef847513d | 21 | const uint32_t BACK_COLOR = 0xFF003538; // LCD 表示器の背景色 |
MikamiUitOpen | 0:5acef847513d | 22 | lcd.Clear(BACK_COLOR); |
MikamiUitOpen | 0:5acef847513d | 23 | lcd.SetFont(&Font20); // フォントのサイズを設定 |
MikamiUitOpen | 0:5acef847513d | 24 | lcd.SetTextColor(LCD_COLOR_WHITE); // 文字列の色を白に設定 |
MikamiUitOpen | 0:5acef847513d | 25 | lcd.SetBackColor(BACK_COLOR); // 文字列の背景色を BACK_COLOR に設定 |
MikamiUitOpen | 0:5acef847513d | 26 | lcd.DisplayStringAt(0, 12, (uint8_t *)"Simplified Oscilloscope", |
MikamiUitOpen | 0:5acef847513d | 27 | CENTER_MODE); // 文字列を描画 |
MikamiUitOpen | 0:5acef847513d | 28 | |
MikamiUitOpen | 0:5acef847513d | 29 | const uint32_t N_DATA = 420; // 表示するデータ数 |
MikamiUitOpen | 0:5acef847513d | 30 | Array<int16_t> xn(N_DATA); // 表示で使うデータ |
MikamiUitOpen | 0:5acef847513d | 31 | // 波形表示用のオブジェクト生成 |
MikamiUitOpen | 0:5acef847513d | 32 | WaveformDisplay waveDisp(lcd, 30, 130, xn, BACK_COLOR); |
MikamiUitOpen | 0:5acef847513d | 33 | |
MikamiUitOpen | 0:5acef847513d | 34 | const uint16_t B_TOP = 235; // "ボタン" の上辺の位置 |
MikamiUitOpen | 0:5acef847513d | 35 | const uint16_t B_WIDTH = 55; // "ボタン" の幅 |
MikamiUitOpen | 0:5acef847513d | 36 | const uint16_t B_HEIGHT = 35; // "ボタン" の高さ |
MikamiUitOpen | 0:5acef847513d | 37 | MyButton run(lcd, 365, B_TOP, B_WIDTH, B_HEIGHT, |
MikamiUitOpen | 0:5acef847513d | 38 | "RUN", LCD_COLOR_BLUE); // "RUN" ボタン生成 |
MikamiUitOpen | 0:5acef847513d | 39 | run.Draw(LCD_COLOR_LIGHTBLUE); // "RUN" ボタンをタッチされた色で描画 |
MikamiUitOpen | 0:5acef847513d | 40 | MyButton stop(lcd, 370+B_WIDTH, B_TOP, B_WIDTH, B_HEIGHT, |
MikamiUitOpen | 0:5acef847513d | 41 | "STOP", LCD_COLOR_BLUE); // "STOP" ボタン生成 |
MikamiUitOpen | 0:5acef847513d | 42 | |
MikamiUitOpen | 0:5acef847513d | 43 | // サウンド信号入力用 SAI 用のオブジェクト生成,入力:MEMS マイク |
MikamiUitOpen | 0:5acef847513d | 44 | SaiIO mySai(SaiIO::INPUT, N_DATA, I2S_AUDIOFREQ_16K, |
MikamiUitOpen | 0:5acef847513d | 45 | INPUT_DEVICE_DIGITAL_MICROPHONE_2); |
MikamiUitOpen | 0:5acef847513d | 46 | mySai.RecordIn(); // 入力開始 |
MikamiUitOpen | 0:5acef847513d | 47 | |
MikamiUitOpen | 0:5acef847513d | 48 | while (true) |
MikamiUitOpen | 0:5acef847513d | 49 | { |
MikamiUitOpen | 0:5acef847513d | 50 | if (run.Touched()) // "RUN" をタッチしたときの処理 |
MikamiUitOpen | 0:5acef847513d | 51 | { |
MikamiUitOpen | 0:5acef847513d | 52 | mySai.ResumeIn(); // 入力再開 |
MikamiUitOpen | 0:5acef847513d | 53 | stop.Draw(); // "STOP" ボタンを最初の色で描画 |
MikamiUitOpen | 0:5acef847513d | 54 | } |
MikamiUitOpen | 0:5acef847513d | 55 | if (stop.Touched()) // "STOP" をタッチしたときの処理 |
MikamiUitOpen | 0:5acef847513d | 56 | { |
MikamiUitOpen | 0:5acef847513d | 57 | mySai.PauseIn(); // 入力中断 |
MikamiUitOpen | 0:5acef847513d | 58 | run.Draw(); // "RUN" ボタンを最初の色で描画 |
MikamiUitOpen | 0:5acef847513d | 59 | } |
MikamiUitOpen | 0:5acef847513d | 60 | |
MikamiUitOpen | 0:5acef847513d | 61 | if (mySai.IsCaptured()) // 入力データがそろったら波形を表示する |
MikamiUitOpen | 0:5acef847513d | 62 | { |
MikamiUitOpen | 0:5acef847513d | 63 | for (int n=0; n<N_DATA; n++) |
MikamiUitOpen | 0:5acef847513d | 64 | mySai.Input(xn[n], xn[n]); // 片方のチャンネルのみ表示 |
MikamiUitOpen | 0:5acef847513d | 65 | waveDisp.Execute(); // 波形の表示 |
MikamiUitOpen | 0:5acef847513d | 66 | } |
MikamiUitOpen | 0:5acef847513d | 67 | } |
MikamiUitOpen | 0:5acef847513d | 68 | } |