CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.
Dependencies: Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real
Xfer.hpp@4:741883d4a075, 2020-02-05 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Feb 05 08:58:16 2020 +0000
- Revision:
- 4:741883d4a075
- Parent:
- 0:a80f730d32a8
5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:a80f730d32a8 | 1 | //--------------------------------------------------------------------- |
MikamiUitOpen | 0:a80f730d32a8 | 2 | // スペクトル解析の結果を PC へ転送するためのクラス |
MikamiUitOpen | 0:a80f730d32a8 | 3 | // |
MikamiUitOpen | 4:741883d4a075 | 4 | // 2020/02/05, Copyright (c) 2020 MIKAMI, Naoki |
MikamiUitOpen | 0:a80f730d32a8 | 5 | //--------------------------------------------------------------------- |
MikamiUitOpen | 0:a80f730d32a8 | 6 | |
MikamiUitOpen | 0:a80f730d32a8 | 7 | #include <string> |
MikamiUitOpen | 0:a80f730d32a8 | 8 | #include "Array.hpp" |
MikamiUitOpen | 0:a80f730d32a8 | 9 | #include "SerialRxTxIntr.hpp" |
MikamiUitOpen | 0:a80f730d32a8 | 10 | using namespace Mikami; |
MikamiUitOpen | 0:a80f730d32a8 | 11 | |
MikamiUitOpen | 0:a80f730d32a8 | 12 | #ifndef XFER_CONVERT_TOPC_HPP |
MikamiUitOpen | 0:a80f730d32a8 | 13 | #define XFER_CONVERT_TOPC_HPP |
MikamiUitOpen | 0:a80f730d32a8 | 14 | |
MikamiUitOpen | 0:a80f730d32a8 | 15 | class Xfer |
MikamiUitOpen | 0:a80f730d32a8 | 16 | { |
MikamiUitOpen | 0:a80f730d32a8 | 17 | public: |
MikamiUitOpen | 0:a80f730d32a8 | 18 | // コンストラクタ |
MikamiUitOpen | 0:a80f730d32a8 | 19 | Xfer(SerialRxTxIntr& rxTx, int size) |
MikamiUitOpen | 0:a80f730d32a8 | 20 | : SIZE_(size), xn_(size), rxTx_(rxTx) {} |
MikamiUitOpen | 0:a80f730d32a8 | 21 | |
MikamiUitOpen | 0:a80f730d32a8 | 22 | // スペクトル解析の結果を転送する形式に変換 |
MikamiUitOpen | 0:a80f730d32a8 | 23 | void Convert(const float db[]) |
MikamiUitOpen | 0:a80f730d32a8 | 24 | { |
MikamiUitOpen | 0:a80f730d32a8 | 25 | static const float FACTOR = 10000.0f/80.0f; // 表示範囲: 0 ~ 80 dB |
MikamiUitOpen | 0:a80f730d32a8 | 26 | for (int n=0; n<SIZE_; n++) |
MikamiUitOpen | 0:a80f730d32a8 | 27 | { |
MikamiUitOpen | 0:a80f730d32a8 | 28 | int32_t xDb = (int32_t)(FACTOR*(db[n] + 40.0f)); |
MikamiUitOpen | 0:a80f730d32a8 | 29 | if (xDb > 10000) xDb = 10000; |
MikamiUitOpen | 0:a80f730d32a8 | 30 | if (xDb < 0) xDb = 0; |
MikamiUitOpen | 0:a80f730d32a8 | 31 | xn_[n] = (uint16_t)xDb; |
MikamiUitOpen | 0:a80f730d32a8 | 32 | } |
MikamiUitOpen | 0:a80f730d32a8 | 33 | } |
MikamiUitOpen | 4:741883d4a075 | 34 | |
MikamiUitOpen | 0:a80f730d32a8 | 35 | // データを PC へ転送(0 ~ 10,000 の範囲の値を 2 文字で表すコード化を利用) |
MikamiUitOpen | 0:a80f730d32a8 | 36 | void ToPC() |
MikamiUitOpen | 0:a80f730d32a8 | 37 | { |
MikamiUitOpen | 0:a80f730d32a8 | 38 | string str = ""; |
MikamiUitOpen | 0:a80f730d32a8 | 39 | for (int n=0; n<SIZE_; n++) |
MikamiUitOpen | 0:a80f730d32a8 | 40 | { |
MikamiUitOpen | 0:a80f730d32a8 | 41 | div_t a = div(xn_[n], 100); |
MikamiUitOpen | 0:a80f730d32a8 | 42 | str += a.quot + 0x10; |
MikamiUitOpen | 0:a80f730d32a8 | 43 | str += a.rem + 0x10; |
MikamiUitOpen | 0:a80f730d32a8 | 44 | } |
MikamiUitOpen | 4:741883d4a075 | 45 | rxTx_.TxString(str+"\n"); |
MikamiUitOpen | 4:741883d4a075 | 46 | rxTx_.TxString("EOT\n"); |
MikamiUitOpen | 0:a80f730d32a8 | 47 | } |
MikamiUitOpen | 0:a80f730d32a8 | 48 | |
MikamiUitOpen | 0:a80f730d32a8 | 49 | private: |
MikamiUitOpen | 0:a80f730d32a8 | 50 | const int SIZE_; // PC に送るデータ数 |
MikamiUitOpen | 0:a80f730d32a8 | 51 | Array<uint16_t> xn_; // PC に送るデータ |
MikamiUitOpen | 0:a80f730d32a8 | 52 | SerialRxTxIntr& rxTx_; |
MikamiUitOpen | 0:a80f730d32a8 | 53 | |
MikamiUitOpen | 0:a80f730d32a8 | 54 | // コピー・コンストラクタおよび代入演算子の禁止のため |
MikamiUitOpen | 0:a80f730d32a8 | 55 | Xfer(const Xfer&); |
MikamiUitOpen | 0:a80f730d32a8 | 56 | Xfer& operator=(const Xfer&); |
MikamiUitOpen | 0:a80f730d32a8 | 57 | }; |
MikamiUitOpen | 4:741883d4a075 | 58 | #endif // XFER_CONVERT_TOPC_HPP |