不韋 呂 / Mbed 2 deprecated F746_RealtimeSpectrumAnalyzer_MEMS_Mic

Dependencies:   BSP_DISCO_F746NG BUTTON_GROUP LCD_DISCO_F746NG TS_DISCO_F746NG UIT_FFT_Real mbed

Committer:
MikamiUitOpen
Date:
Sun Jan 10 09:58:43 2016 +0000
Revision:
4:2cdaad00d208
Parent:
2:5644475f01ea
Child:
6:16d668c3aa1e
5

Who changed what in which revision?

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