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

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

MyFiles/LcdPanel.hpp

Committer:
MikamiUitOpen
Date:
2018-03-12
Revision:
2:dd48e1e59daa
Parent:
0:ab7a35d87173

File content as of revision 2:dd48e1e59daa:

//-----------------------------------------------------------
//  ディジタルフィルタ実験のためのプラットフォームの
//  LCD パネル表示と操作で使う
//
//  2017/10/07, Copyright (c) 2017 MIKAMI, Naoki
//-----------------------------------------------------------

#ifndef PANEL_MANIPULATOR_HPP
#define PANEL_MANIPULATOR_HPP

#include "F746_GUI.hpp"
#include "NumericUpDown.hpp"
#include "Zoom.hpp"
#include "WaveformDisplay.hpp"
#include "Trigger.hpp"

namespace Mikami
{
    class LcdPanel
    {
    public:
        LcdPanel() : lcd_(GuiBase::GetLcd()),
                     xnD_(N_DISP_BUF_), ynD_(N_DISP_BUF_), factor_(1)
        {
            Label title(240, 10, "Digital Filter LAB using internal ADC",
                        Label::CENTER, Font16);

            const uint16_t Y0 = 170;
            // 凡例
            lcd_.SetTextColor(LINE_COLOR1_);
            lcd_.DrawHLine(360, Y0+6, 50);
            Label label1(420, Y0, "Input");
            lcd_.SetTextColor(LINE_COLOR2_);
            lcd_.DrawHLine(360, Y0+26, 50);
            Label label2(420, Y0+20, "Output");

            waveDisp_ = new WaveformDisplay(lcd_, 30, 90, xnD_, ynD_, 400, 8,
                                            AXIS_COLOR_,
                                            LINE_COLOR1_, LINE_COLOR2_,
                                            BACK_COLOR_);

            // 時間軸の拡大率は 8 倍まで
            zmButton_ = new ZoomButton(240, Y0, 40, 30, 8);
        }

        // ズームイン/アウト・ボタンの処理
        void Update() { zmButton_->Touched(factor_); }

        // 入出力信号のデータを表示用バッファへ格納
        void Store(int16_t xn, int16_t yn, int n)
        {
            if (n >= N_DISP_BUF_) return;

            xnD_[n] = xn;
            ynD_[n] = yn;
        }
        
        // 入出力信号の波形の表示
        void Display() { waveDisp_->Execute(Trigger(xnD_, 1), factor_); }

    private:
        static const uint32_t BACK_COLOR_ = GuiBase::ENUM_BACK;
        static const uint32_t AXIS_COLOR_ = 0xFFCCFFFF;
        static const uint32_t LINE_COLOR1_ = LCD_COLOR_CYAN;
        static const uint32_t LINE_COLOR2_ = LCD_COLOR_MAGENTA;
        static const int N_DISP_BUF_ = 1000;    // 波形表示用のバッファのサイズ

        LCD_DISCO_F746NG &lcd_;
        WaveformDisplay *waveDisp_;
        ZoomButton *zmButton_;  // 波形表示:ズームイン/アウト用

        Array<int16_t> xnD_;    // 波形表示で使うバッファ(入力信号用)
        Array<int16_t> ynD_;    // 波形表示で使うバッファ(出力信号用)
        int factor_;            // 波形表示の際の標本化間隔に対応するピクセル数
    };
}
#endif  // PANEL_MANIPULATOR_HPP