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

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real

Xfer.hpp

Committer:
MikamiUitOpen
Date:
2020-04-02
Revision:
5:5e55a5f440c0
Parent:
4:741883d4a075

File content as of revision 5:5e55a5f440c0:

//---------------------------------------------------------------------
//  スペクトル解析の結果を PC へ転送するためのクラス
//
//  2020/02/05, Copyright (c) 2020 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_.TxString(str+"\n");
        rxTx_.TxString("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