CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使うプログラムを,入力として STM32F746 の内蔵 ADC を使うように変更したもの. http://seminar.cqpub.co.jp/ccm/ES18-0020

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LcdPanel.hpp Source File

LcdPanel.hpp

00001 //-----------------------------------------------------------
00002 //  ディジタルフィルタ実験のためのプラットフォームの
00003 //  LCD パネル表示と操作で使う
00004 //
00005 //  2017/10/07, Copyright (c) 2017 MIKAMI, Naoki
00006 //-----------------------------------------------------------
00007 
00008 #ifndef PANEL_MANIPULATOR_HPP
00009 #define PANEL_MANIPULATOR_HPP
00010 
00011 #include "F746_GUI.hpp"
00012 #include "NumericUpDown.hpp"
00013 #include "Zoom.hpp"
00014 #include "WaveformDisplay.hpp"
00015 #include "Trigger.hpp"
00016 
00017 namespace Mikami
00018 {
00019     class LcdPanel
00020     {
00021     public:
00022         LcdPanel() : lcd_(GuiBase::GetLcd()),
00023                      xnD_(N_DISP_BUF_), ynD_(N_DISP_BUF_), factor_(1)
00024         {
00025             Label title(240, 10, "Digital Filter LAB using internal ADC",
00026                         Label::CENTER, Font16);
00027 
00028             const uint16_t Y0 = 170;
00029             // 凡例
00030             lcd_.SetTextColor(LINE_COLOR1_);
00031             lcd_.DrawHLine(360, Y0+6, 50);
00032             Label label1(420, Y0, "Input");
00033             lcd_.SetTextColor(LINE_COLOR2_);
00034             lcd_.DrawHLine(360, Y0+26, 50);
00035             Label label2(420, Y0+20, "Output");
00036 
00037             waveDisp_ = new WaveformDisplay(lcd_, 30, 90, xnD_, ynD_, 400, 8,
00038                                             AXIS_COLOR_,
00039                                             LINE_COLOR1_, LINE_COLOR2_,
00040                                             BACK_COLOR_);
00041 
00042             // 時間軸の拡大率は 8 倍まで
00043             zmButton_ = new ZoomButton(240, Y0, 40, 30, 8);
00044         }
00045 
00046         // ズームイン/アウト・ボタンの処理
00047         void Update() { zmButton_->Touched(factor_); }
00048 
00049         // 入出力信号のデータを表示用バッファへ格納
00050         void Store(int16_t xn, int16_t yn, int n)
00051         {
00052             if (n >= N_DISP_BUF_) return;
00053 
00054             xnD_[n] = xn;
00055             ynD_[n] = yn;
00056         }
00057         
00058         // 入出力信号の波形の表示
00059         void Display() { waveDisp_->Execute(Trigger(xnD_, 1), factor_); }
00060 
00061     private:
00062         static const uint32_t BACK_COLOR_ = GuiBase::ENUM_BACK;
00063         static const uint32_t AXIS_COLOR_ = 0xFFCCFFFF;
00064         static const uint32_t LINE_COLOR1_ = LCD_COLOR_CYAN;
00065         static const uint32_t LINE_COLOR2_ = LCD_COLOR_MAGENTA;
00066         static const int N_DISP_BUF_ = 1000;    // 波形表示用のバッファのサイズ
00067 
00068         LCD_DISCO_F746NG &lcd_;
00069         WaveformDisplay *waveDisp_;
00070         ZoomButton *zmButton_;  // 波形表示:ズームイン/アウト用
00071 
00072         Array<int16_t> xnD_;    // 波形表示で使うバッファ(入力信号用)
00073         Array<int16_t> ynD_;    // 波形表示で使うバッファ(出力信号用)
00074         int factor_;            // 波形表示の際の標本化間隔に対応するピクセル数
00075     };
00076 }
00077 #endif  // PANEL_MANIPULATOR_HPP