Version using MEMS microphone and CODEC for the program "F746_RealtimeSpectrumAnalyzer". "F746_RealtimeSpectrumAnalyzer" の入力を MEMS のマイクと CODEC に変更.このプログラムは Tomona Nanase さんが作成し DISCO-F746NG_Oscilloscope の名前で登録しているプログラムで, CODEC を使って入力する部分を参考にして作成.このプログラムの説明は,CQ出版社のインターフェース誌,2016年4月号に掲載.

Dependencies:   BSP_DISCO_F746NG BUTTON_GROUP LCD_DISCO_F746NG TS_DISCO_F746NG UIT_FFT_Real mbed

Revision:
3:a6df3a2de219
Parent:
1:ac0a67a0deec
Child:
5:3465b7b7acb8
--- a/main.cpp	Thu Jan 07 09:48:29 2016 +0000
+++ b/main.cpp	Fri Jan 08 13:03:24 2016 +0000
@@ -2,7 +2,7 @@
 //  Realtime spectrum analyzer
 //      Input: MEMS microphone or CN11
 //
-//  2016/01/06, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/01/08, Copyright (c) 2016 MIKAMI, Naoki
 //------------------------------------------------
 
 #include "main.h"
@@ -14,6 +14,14 @@
 __IO int32_t audio_in_buffer_offset = 0;
 __IO int32_t audio_in_buffer_length = 0;
 
+// Switching input device
+void SwitchInputDevice(int sw)
+{
+    uint16_t dev = (sw == 0) ? INPUT_DEVICE_DIGITAL_MICROPHONE_2
+                             : INPUT_DEVICE_INPUT_LINE_1;
+    InitRunAudioIn(dev, I2S_AUDIOFREQ_16K);
+}
+
 int main()
 {
     const int FS = 8000;        // Sampling frequency: 8 kHz
@@ -65,7 +73,7 @@
     WaveformDisplay waveDisp(lcd, X_WAV, Y_WAV, N_DATA, 9,
                              AXIS_COLOR, LINE_COLOR, BACK_COLOR);
 
-    SpectrumDisplay disp(lcd, N_FFT, X0, Y0, -40, DB1, BIN, W_DB, FS,
+    SpectrumDisplay disp(lcd, N_FFT, X0, Y0, -45, DB1, BIN, W_DB, FS,
                          AXIS_COLOR, LINE_COLOR, BACK_COLOR);
     // Linear prediction:   order = 10
     // Cepstral smoothing:  highest quefrency = 40
@@ -73,8 +81,8 @@
 
     // Initialize the infinite loop procedure
     int select = -1;
-    uint16_t inputDevice;
-    int mic = 0;
+//    int mic = 0;
+    int sw = 0; // 0: mic, 1: line
     int stop = 0;
     int16_t sn[N_DATA];
 
@@ -88,23 +96,16 @@
     {
         if (runStop.Touched(0, TOUCHED_COLOR))
         {
-            inputDevice = (mic == 0) ? INPUT_DEVICE_DIGITAL_MICROPHONE_2
-                                     : INPUT_DEVICE_INPUT_LINE_1;
-            InitRunAudioIn(inputDevice, I2S_AUDIOFREQ_16K);
-            micLine.Draw(mic, TOUCHED_COLOR);
-            micLine.Redraw(1-mic);
+            SwitchInputDevice(sw);
+            micLine.Draw(sw, TOUCHED_COLOR);
+            micLine.Redraw(1-sw);
         }
 
         runStop.GetTouchedNumber(stop, TOUCHED_COLOR);
         if (stop == 0)
         {
-            if (micLine.GetTouchedNumber(mic, TOUCHED_COLOR))
-            {
-                StopAudioIn();  // Stop sampling
-                inputDevice = (mic == 0) ? INPUT_DEVICE_DIGITAL_MICROPHONE_2
-                                         : INPUT_DEVICE_INPUT_LINE_1;
-                InitRunAudioIn(inputDevice, I2S_AUDIOFREQ_16K);
-            }
+            if (micLine.GetTouchedNumber(sw, TOUCHED_COLOR))
+                SwitchInputDevice(sw);
 
             if (audio_in_buffer_captured)
             {