CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 02 01:12:34 2020 +0000
Revision:
5:5e55a5f440c0
Parent:
4:741883d4a075
6

Who changed what in which revision?

UserRevisionLine numberNew 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