質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

Q&A

1回答

1958閲覧

PICマイコンを使ってBluetooth通信で数値を表示する方法

ttkkss

総合スコア13

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

0グッド

0クリップ

投稿2019/05/29 07:57

前提・実現したいこと

センサが取得した測定データをPICマイコンで処理してbluetooth通信でスマホに測定データを出力・表示したいです。
スマホに文字列(testなど)表示はできるようになりましたが、数値(1234など)が正しく表示されません。(スマホ上では?で表示される)
数値が正しく表示できるか下記のコードで確認してみました。

該当のソースコード(該当部分のみ抜き出し)

C言語

1//bluetooth送信ファンクション// 2void BT_load_char(char byte) 3{ 4 TXREG = byte; 5 while(!TXIF); 6 while(!TRMT); 7} 8 9void BT_load_string(char* string) 10{ 11 while(*string) 12 BT_load_char(*string++); 13} 14 15void BT_load_int(int data) 16{ 17 TXREG = data; 18 while(!TXIF); 19 while(!TRMT); 20} 21 22void BT_load_num(int* num) 23{ 24 while(*num) 25 BT_load_char(*num++); 26} 27 28void broadcast_BT() 29{ 30 TXREG = 13; 31 __delay_ms(500); 32} 33 34void main(void) { 35 PICinit(); 36 Initialize_Bluetooth(); 37 int T = 1234; 38 39 while(1){ 40 BT_load_string("test テスト"); 41 broadcast_BT(); 42 __delay_ms(2000); 43 BT_load_int(T); 44 broadcast_BT(); 45 __delay_ms(2000); 46 } 47 48 return; 49} 50

マイコン、C言語ともにやり始めたばかりなので何かといたらぬ点あるかと思いますが、ご助言いただければ幸いです。

試したこと

intをfloatやdoubleにしても数値が表示されませんでした。

補足情報(FW/ツールのバージョンなど)

bluetoothモジュール:SH-HC-08
PIC関連:PIC12F1840, mplab ide ver5.15, XC8 ver2.05

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

コンピュータ上には実は「文字」はありません。あるのは数値データだけ。でも文字は扱えますし、表示しています。これは、文字に数値を割り当てて、「文字を扱う」と決めたときには例えば48を'0', 49を'1', 65を'A', 66を'B'などという「ことにする」のです。(代表的な対応表は'ASCIIコード'で検索してみて下さい)

あなたの作ったプログラムは、例えば84,101,115,116というデータを受信すると、それに対応したTestという文字群を表示するということをしているのです。

ここに、例えばintやfloatなどで「数値」を送り込んでしまうと...例えば1234などという値には文字が割り当てられていませんから、せめて'?'を表示した、ということなのでしょう。

コンピュータのプログラムレベルの話をするときには、数値と数字はしっかり区別しなければいけません。スマホ側が文字列を扱う約束になっているのなら、数値を文字列に変換して、文字列として送って下さい。PICのXCのライブラリ関数がどこまであるかわかりませんが、例えばsprintf()を使えば数値を文字列に変換できるでしょう。C言語の練習としては、自力で変換関数を書くというのもよくある課題です。

投稿2019/05/29 12:32

thkana

総合スコア7610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問