Simplified oscilloscope using DISCO-F746. Input: MEMS microphone. DISCO-F746 による簡易オシロスコープ.入力:MEMS マイク.

Dependencies:   F746_GUI F746_SAI_IO mbed

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;
+}