質問: 1234; while(1){ BT_load_string("test テスト"); broadcast_BT(); __delay_ms(2000); BT_load_int(T); broadcast_BT(); __delay_ms(2000); } return; } ``` マイコン、C言語ともにやり始めたばかりなので何かといたらぬ点あるかと思いますが、ご助言いただければ幸いです。 ### 試したこと intをfloatやdoubleにしても数値が表示されませんでした。 ### 補足情報(FW/ツールのバージョンなど) bluetoothモジュール:SH-HC-08 PIC関連:PIC12F1840, mplab ide ver5.15, XC8 ver2.05
回答: コンピュータ上には実は「文字」はありません。あるのは数値データだけ。でも文字は扱えますし、表示しています。これは、文字に数値を割り当てて、「文字を扱う」と決めたときには例えば48を'0', 49を'1', 65を'A', 66を'B'などという「ことにする」のです。(代表的な対応表は'ASCIIコード'で検索してみて下さい) あなたの作ったプログラムは、例えば84,101,115,116というデータを受信すると、それに対応したTestという文字群を表示するということをしているのです。 ここに、例えばintやfloatなどで「数値」を送り込んでしまうと...例えば1234などという値には文字が割り当てられていませんから、せめて'?'を表示した、ということなのでしょう。 コンピュータのプログラムレベルの話をするときには、数値と数字はしっかり区別しなければいけません。スマホ側が文字列を扱う約束になっているのなら、数値を文字列に変換して、文字列として送って下さい。PICのXCのライブラリ関数がどこまであるかわかりませんが、例えばsprintf()を使えば数値を文字列に変換できるでしょう。C言語の練習としては、自力で変換関数を書くというのもよくある課題です。