Simplified oscilloscope using DISCO-F746. Input: MEMS microphone. DISCO-F746 による簡易オシロスコープ.入力:MEMS マイク.
Dependencies: F746_GUI F746_SAI_IO mbed
Diff: main.cpp
- Revision:
- 0:5acef847513d
- Child:
- 1:a53d220362d4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jan 24 00:00:07 2017 +0000 @@ -0,0 +1,68 @@ +//-------------------------------------------------------------- +// MEMS マイクから CODEC を使って入力したサウンド信号の波形の表示 +// 標本化周波数: 16 kHz +// +// ライブラリのリビジョン: +// BSP_DISCO_F746NG rev.5 +// mbed rev.131 +// +// 2017/01/23, Copyright (c) 2017 MIKAMI, Naoki +//-------------------------------------------------------------- + +#include "mbed.h" +#include "SAI_InOut.hpp" // 筆者の作った SAI 用ライブラリ +#include "WaveformDisplay.hpp" // 今回作った波形表示用ライブラリ +#include "MyButton.hpp" // 今回作った「ボタン」用ライブラリ +using namespace Mikami; // 筆者の作ったライブラリで使っている名前空間 + +int main() +{ + LCD_DISCO_F746NG lcd; // LCD のオブジェクト生成 + const uint32_t BACK_COLOR = 0xFF003538; // LCD 表示器の背景色 + lcd.Clear(BACK_COLOR); + lcd.SetFont(&Font20); // フォントのサイズを設定 + lcd.SetTextColor(LCD_COLOR_WHITE); // 文字列の色を白に設定 + lcd.SetBackColor(BACK_COLOR); // 文字列の背景色を BACK_COLOR に設定 + lcd.DisplayStringAt(0, 12, (uint8_t *)"Simplified Oscilloscope", + CENTER_MODE); // 文字列を描画 + + const uint32_t N_DATA = 420; // 表示するデータ数 + Array<int16_t> xn(N_DATA); // 表示で使うデータ + // 波形表示用のオブジェクト生成 + WaveformDisplay waveDisp(lcd, 30, 130, xn, BACK_COLOR); + + const uint16_t B_TOP = 235; // "ボタン" の上辺の位置 + const uint16_t B_WIDTH = 55; // "ボタン" の幅 + const uint16_t B_HEIGHT = 35; // "ボタン" の高さ + MyButton run(lcd, 365, B_TOP, B_WIDTH, B_HEIGHT, + "RUN", LCD_COLOR_BLUE); // "RUN" ボタン生成 + run.Draw(LCD_COLOR_LIGHTBLUE); // "RUN" ボタンをタッチされた色で描画 + MyButton stop(lcd, 370+B_WIDTH, B_TOP, B_WIDTH, B_HEIGHT, + "STOP", LCD_COLOR_BLUE); // "STOP" ボタン生成 + + // サウンド信号入力用 SAI 用のオブジェクト生成,入力:MEMS マイク + SaiIO mySai(SaiIO::INPUT, N_DATA, I2S_AUDIOFREQ_16K, + INPUT_DEVICE_DIGITAL_MICROPHONE_2); + mySai.RecordIn(); // 入力開始 + + while (true) + { + if (run.Touched()) // "RUN" をタッチしたときの処理 + { + mySai.ResumeIn(); // 入力再開 + stop.Draw(); // "STOP" ボタンを最初の色で描画 + } + if (stop.Touched()) // "STOP" をタッチしたときの処理 + { + mySai.PauseIn(); // 入力中断 + run.Draw(); // "RUN" ボタンを最初の色で描画 + } + + if (mySai.IsCaptured()) // 入力データがそろったら波形を表示する + { + for (int n=0; n<N_DATA; n++) + mySai.Input(xn[n], xn[n]); // 片方のチャンネルのみ表示 + waveDisp.Execute(); // 波形の表示 + } + } +}