PC から,リアルタイム信号処理を行っている Nucleo-F446 を制御する例.
Dependencies: mbed SerialTxRxIntr F446_AD_DA_Multirate
Diff: main.cpp
- Revision:
- 4:3087a0841304
- Parent:
- 3:42f9127d578d
- Child:
- 5:5f98dddab84b
--- a/main.cpp Sun Oct 07 03:31:07 2018 +0000 +++ b/main.cpp Sun Oct 07 11:37:07 2018 +0000 @@ -6,20 +6,18 @@ // 処理の内容:AD 変換器からの入力に倍率を乗算し DA 変換器に出力する // 倍率は PC からの指令で変更する // PC からの指令: 0.00 ~ 1.00 倍 -// 乗算あり/なしは PC からの指令により ACTIVE/THROUGH の切り替えが可能 -// -// "ENQ” を除く PC からの指令については,そのまま PC へ送る +// 音量調整あり/なしは PC からの指令により ACTIVE/THROUGH の切り替えが可能 // // PC 側のプログラム // F446_AD_DA_Ctrl // 端末エミュレータでも使用可能 // -// 2018/10/06, Copyright (c) 2018 MIKAMI, Naoki +// 2018/10/07, Copyright (c) 2018 MIKAMI, Naoki //---------------------------------------------------------------------- #include "F446_Multirate.hpp" #include "SerialRxTxIntr.hpp" -#include <cctype> +#include <cctype> // isalpha() で使用 #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため using namespace Mikami; @@ -28,6 +26,14 @@ F446_Multirate myAdDa_; // 出力標本化周波数を4倍にするオブジェクト SerialRxTxIntr rxTx_; // Serial クラスの受送信割込み用オブジェクト +// パラメータの値を送信(必要に応じて sprintf() の内容を変えること) +void SendParm(float parm) +{ + char buf[32]; + sprintf(buf, "L音量: %3d %%\r\n", (int)(parm*100)); + rxTx_.Tx(buf); // label1 に表示する文字列を送信 +} + int main() { printf("\r\n端末エミュレータでも使用可能\r\n"); @@ -39,7 +45,7 @@ NVIC_SetPriority(ADC_IRQn, 0); // ADC 終了割り込み:最優先 NVIC_SetPriority(USART2_IRQn, 1); // USART2 割り込み:次に優先 - float volume = 0.5f; // 音量を決める変数 + float volume = 0.4f; // 音量を決める変数(初期値) bool sw = true; myAdDa_.Start(FS_); // 標本化を開始する @@ -59,11 +65,12 @@ string str = rxTx_.GetBuffer(); if (str == "ENQ") { - rxTx_.Tx("ACK\n"); // PC からの "ENQ" に対して "ACK" を送信する - rxTx_.Tx("LVolume: 0.4000\n"); + rxTx_.Tx("ACK\n"); // PC からの "ENQ" に対して "ACK" を送信する + SendParm(volume); // 最初に label1 に表示する文字列を送信 + char buf[16]; - sprintf(buf, "S%5d\n", (uint32_t)(65535*0.4f)); - rxTx_.Tx(buf); // スライダ(TrackBar)の位置を送信 + sprintf(buf, "S%5d\n", (uint32_t)(65535*volume)); + rxTx_.Tx(buf); // スライダ(TrackBar)の位置を送信 } else // "ENQ" 以外の処理 { @@ -79,10 +86,11 @@ else // 先頭が A ~ Z, a ~ z 以外の場合 { // float 型のデータとみなして数値化する + // 送信されたデータを基にパラメータを変更する volume = atoi(str.c_str())/65535.0f; - char buf[32]; - sprintf(buf, "LVolume: %6.4f\r\n", volume); - rxTx_.Tx(buf); + + // パラメータの値を送信 + SendParm(volume); } } }