CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.
Dependencies: Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real
Diff: Xfer.hpp
- Revision:
- 0:a80f730d32a8
- Child:
- 4:741883d4a075
diff -r 000000000000 -r a80f730d32a8 Xfer.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Xfer.hpp Wed Jan 15 12:43:11 2020 +0000 @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------- +// スペクトル解析の結果を PC へ転送するためのクラス +// +// 2019/11/16, Copyright (c) 2019 MIKAMI, Naoki +//--------------------------------------------------------------------- + +#include <string> +#include "Array.hpp" +#include "SerialRxTxIntr.hpp" +using namespace Mikami; + +#ifndef XFER_CONVERT_TOPC_HPP +#define XFER_CONVERT_TOPC_HPP + +class Xfer +{ +public: + // コンストラクタ + Xfer(SerialRxTxIntr& rxTx, int size) + : SIZE_(size), xn_(size), rxTx_(rxTx) {} + + // スペクトル解析の結果を転送する形式に変換 + void Convert(const float db[]) + { + static const float FACTOR = 10000.0f/80.0f; // 表示範囲: 0 ~ 80 dB + for (int n=0; n<SIZE_; n++) + { + int32_t xDb = (int32_t)(FACTOR*(db[n] + 40.0f)); + if (xDb > 10000) xDb = 10000; + if (xDb < 0) xDb = 0; + xn_[n] = (uint16_t)xDb; + } + } + + // データを PC へ転送(0 ~ 10,000 の範囲の値を 2 文字で表すコード化を利用) + void ToPC() + { + string str = ""; + for (int n=0; n<SIZE_; n++) + { + div_t a = div(xn_[n], 100); + str += a.quot + 0x10; + str += a.rem + 0x10; + } + rxTx_.Tx(str+"\n"); + rxTx_.Tx("EOT\n"); + } + +private: + const int SIZE_; // PC に送るデータ数 + Array<uint16_t> xn_; // PC に送るデータ + SerialRxTxIntr& rxTx_; + + // コピー・コンストラクタおよび代入演算子の禁止のため + Xfer(const Xfer&); + Xfer& operator=(const Xfer&); +}; +#endif // XFER_CONVERT_TOPC_HPP +