Simplified oscilloscope using DISCO-F746. Input: MEMS microphone. DISCO-F746 による簡易オシロスコープ.入力:MEMS マイク.
Dependencies: F746_GUI F746_SAI_IO mbed
Diff: WaveformDisplay.cpp
- Revision:
- 1:a53d220362d4
- Child:
- 2:1fa4647505bf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WaveformDisplay.cpp Wed Mar 15 02:03:39 2017 +0000 @@ -0,0 +1,41 @@ +//----------------------------------------------------------- +// 波形表示のためのクラス +// +// 2017/03/15, Copyright (c) 2017 MIKAMI, Naoki +//----------------------------------------------------------- + +#include "WaveformDisplay.hpp" + +// 波形表示 +void WaveformDisplay::Execute() +{ + // 以前の波形を消去 + lcd_->SetTextColor(BACK_COLOR_); + lcd_->FillRect(X0_, Y0_-LIMIT_, N_DATA_, LIMIT_*2+1); + + // 横軸の描画 + lcd_->SetTextColor(LCD_COLOR_CYAN); + lcd_->DrawLine(X0_-5, Y0_, X0_+N_DATA_+5, Y0_); + + // 波形の描画 + lcd_->SetTextColor(LCD_COLOR_WHITE); + uint16_t x1 = X0_; + uint16_t y1 = Clip(xn_[0]); + for (int n=1; n<N_DATA_; n++) + { + uint16_t x2 = X0_ + n; + uint16_t y2 = Clip(xn_[n]); + lcd_->DrawLine(x1, y1, x2, y2); + x1 = x2; + y1 = y2; + } +} + +// 縦方向のクリッピングとと縦方向の位置の移動 +uint16_t WaveformDisplay::Clip(int16_t xn) +{ + int16_t x = xn >> R_SHIFT_; // スケーリング + if (x > LIMIT_ ) x = LIMIT_; + if (x < -LIMIT_ ) x = -LIMIT_ ; + return Y0_ + x; +}