PC から,リアルタイム信号処理を行っている Nucleo-F446 を制御する例.

Dependencies:   mbed SerialTxRxIntr F446_AD_DA_Multirate

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);
                 }
             }
         }