Simplified oscilloscope using DISCO-F746. Input: MEMS microphone. DISCO-F746 による簡易オシロスコープ.入力:MEMS マイク.

Dependencies:   F746_GUI F746_SAI_IO mbed

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();     // 波形の表示
+        }
+    }
+}