Audio singal input and output example for DISCO-F746. Input: MEMS mic, Output: CN10 OUT, Acoustic effect: echo and frequency shift. DISCO-F746 によるオーディオ信号入出力.入力:MEMS マイク,出力:CN10 OUT,音響効果:エコー,周波数変換.

Dependencies:   F746_GUI F746_SAI_IO

Committer:
MikamiUitOpen
Date:
Thu Apr 14 08:37:11 2016 +0000
Revision:
0:f064b50f238e
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:f064b50f238e 1 //-----------------------------------------------------------
MikamiUitOpen 0:f064b50f238e 2 // Class for waveform display
MikamiUitOpen 0:f064b50f238e 3 //
MikamiUitOpen 0:f064b50f238e 4 // 2015/12/15, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:f064b50f238e 5 //-----------------------------------------------------------
MikamiUitOpen 0:f064b50f238e 6
MikamiUitOpen 0:f064b50f238e 7 #ifndef F746_WAVEFORM_DISPLAY_HPP
MikamiUitOpen 0:f064b50f238e 8 #define F746_WAVEFORM_DISPLAY_HPP
MikamiUitOpen 0:f064b50f238e 9
MikamiUitOpen 0:f064b50f238e 10 #include "mbed.h"
MikamiUitOpen 0:f064b50f238e 11
MikamiUitOpen 0:f064b50f238e 12 namespace Mikami
MikamiUitOpen 0:f064b50f238e 13 {
MikamiUitOpen 0:f064b50f238e 14 class WaveformDisplay
MikamiUitOpen 0:f064b50f238e 15 {
MikamiUitOpen 0:f064b50f238e 16 public:
MikamiUitOpen 0:f064b50f238e 17 WaveformDisplay(LCD_DISCO_F746NG &lcd,
MikamiUitOpen 0:f064b50f238e 18 uint16_t x0, uint16_t y0, int nData,
MikamiUitOpen 0:f064b50f238e 19 uint16_t rShift,
MikamiUitOpen 0:f064b50f238e 20 uint32_t axisColor, uint32_t lineColor,
MikamiUitOpen 0:f064b50f238e 21 uint32_t backColor)
MikamiUitOpen 0:f064b50f238e 22 : X0_(x0), Y0_(y0), N_DATA_(nData), R_SHIFT_(rShift),
MikamiUitOpen 0:f064b50f238e 23 AXIS_COLOR_(axisColor), LINE_COLOR_(lineColor),
MikamiUitOpen 0:f064b50f238e 24 BACK_COLOR_(backColor), lcd_(lcd) { Axis(); }
MikamiUitOpen 0:f064b50f238e 25
MikamiUitOpen 0:f064b50f238e 26 void Execute(const int16_t xn[])
MikamiUitOpen 0:f064b50f238e 27 {
MikamiUitOpen 0:f064b50f238e 28 static const uint16_t LIMIT1 = Y0_ + LIMIT2_;
MikamiUitOpen 0:f064b50f238e 29 static const uint16_t LIMIT2 = Y0_ - LIMIT2_;
MikamiUitOpen 0:f064b50f238e 30 Axis();
MikamiUitOpen 0:f064b50f238e 31 lcd_.SetTextColor(LINE_COLOR_);
MikamiUitOpen 0:f064b50f238e 32 uint16_t x1 = X0_;
MikamiUitOpen 0:f064b50f238e 33 uint16_t y1 = Clip(xn[0]);
MikamiUitOpen 0:f064b50f238e 34 for (int n=1; n<N_DATA_; n++)
MikamiUitOpen 0:f064b50f238e 35 {
MikamiUitOpen 0:f064b50f238e 36 uint16_t x2 = X0_ + n;
MikamiUitOpen 0:f064b50f238e 37 uint16_t y2 = Clip(xn[n]);
MikamiUitOpen 0:f064b50f238e 38 if ( ((y2 == LIMIT1) && (y1 == LIMIT1)) ||
MikamiUitOpen 0:f064b50f238e 39 ((y2 == LIMIT2) && (y1 == LIMIT2)) )
MikamiUitOpen 0:f064b50f238e 40 { // Out of displaying boundaries
MikamiUitOpen 0:f064b50f238e 41 lcd_.SetTextColor(LCD_COLOR_RED);
MikamiUitOpen 0:f064b50f238e 42 lcd_.DrawHLine(x1, y1, 1);
MikamiUitOpen 0:f064b50f238e 43 lcd_.SetTextColor(LINE_COLOR_);
MikamiUitOpen 0:f064b50f238e 44 }
MikamiUitOpen 0:f064b50f238e 45 else
MikamiUitOpen 0:f064b50f238e 46 lcd_.DrawLine(x1, y1, x2, y2);
MikamiUitOpen 0:f064b50f238e 47 if ((y1 == LIMIT1) || (y1 == LIMIT2))
MikamiUitOpen 0:f064b50f238e 48 lcd_.DrawPixel(x1, y1, LCD_COLOR_RED);
MikamiUitOpen 0:f064b50f238e 49 x1 = x2;
MikamiUitOpen 0:f064b50f238e 50 y1 = y2;
MikamiUitOpen 0:f064b50f238e 51 }
MikamiUitOpen 0:f064b50f238e 52 lcd_.SetTextColor(BACK_COLOR_);
MikamiUitOpen 0:f064b50f238e 53 }
MikamiUitOpen 0:f064b50f238e 54
MikamiUitOpen 0:f064b50f238e 55 private:
MikamiUitOpen 0:f064b50f238e 56 const uint16_t X0_;
MikamiUitOpen 0:f064b50f238e 57 const uint16_t Y0_;
MikamiUitOpen 0:f064b50f238e 58 const int N_DATA_;
MikamiUitOpen 0:f064b50f238e 59 const uint16_t R_SHIFT_;
MikamiUitOpen 0:f064b50f238e 60 const uint32_t AXIS_COLOR_;
MikamiUitOpen 0:f064b50f238e 61 const uint32_t LINE_COLOR_;
MikamiUitOpen 0:f064b50f238e 62 const uint32_t BACK_COLOR_;
MikamiUitOpen 0:f064b50f238e 63 static const int LIMIT_ = 32;
MikamiUitOpen 0:f064b50f238e 64 static const int LIMIT2_ = LIMIT_ + 1;
MikamiUitOpen 0:f064b50f238e 65
MikamiUitOpen 0:f064b50f238e 66 LCD_DISCO_F746NG& lcd_;
MikamiUitOpen 0:f064b50f238e 67
MikamiUitOpen 0:f064b50f238e 68 // Clipping
MikamiUitOpen 0:f064b50f238e 69 uint16_t Clip(int16_t xn)
MikamiUitOpen 0:f064b50f238e 70 {
MikamiUitOpen 0:f064b50f238e 71 int16_t x = xn >> R_SHIFT_;
MikamiUitOpen 0:f064b50f238e 72 if (x > LIMIT_ ) x = LIMIT2_;
MikamiUitOpen 0:f064b50f238e 73 if (x < -LIMIT_ ) x = -LIMIT2_ ;
MikamiUitOpen 0:f064b50f238e 74 return Y0_ - x;
MikamiUitOpen 0:f064b50f238e 75 }
MikamiUitOpen 0:f064b50f238e 76
MikamiUitOpen 0:f064b50f238e 77 void Axis()
MikamiUitOpen 0:f064b50f238e 78 {
MikamiUitOpen 0:f064b50f238e 79 lcd_.SetTextColor(BACK_COLOR_);
MikamiUitOpen 0:f064b50f238e 80 lcd_.FillRect(X0_, Y0_-LIMIT2_, N_DATA_, LIMIT2_*2+1);
MikamiUitOpen 0:f064b50f238e 81
MikamiUitOpen 0:f064b50f238e 82 lcd_.SetTextColor(AXIS_COLOR_);
MikamiUitOpen 0:f064b50f238e 83 lcd_.DrawLine(X0_-5, Y0_, X0_+N_DATA_+5, Y0_);
MikamiUitOpen 0:f064b50f238e 84 }
MikamiUitOpen 0:f064b50f238e 85
MikamiUitOpen 0:f064b50f238e 86 // disallow copy constructor and assignment operator
MikamiUitOpen 0:f064b50f238e 87 WaveformDisplay(const WaveformDisplay& );
MikamiUitOpen 0:f064b50f238e 88 WaveformDisplay& operator=(const WaveformDisplay& );
MikamiUitOpen 0:f064b50f238e 89 };
MikamiUitOpen 0:f064b50f238e 90 }
MikamiUitOpen 0:f064b50f238e 91 #endif // F746_WAVEFORM_DISPLAY_HPP