いつもお世話になっております。
体温センサ(ADT7410)から取得した値(float型)をsprintfで文字列に変換してシリアルモニタに表示したいのですが文字化けして?になってしまいます。
脈拍センサも同時に測定しているためコードが見づらくなってしまい申し訳ありませんmm
Arduino
1#include <Wire.h> //I2C通信のライブラリ 2 3int adt7410I2CAddress = 0x48; //温度センサのアドレス 4int SensorOutPin = 0; // パルスセンサー出力をアナログピンの0番指定 5int Signal; // analogReadで読み取る値の格納変数 6char buff[24]; 7 8void setup(void) { // 初期化 9 Serial.begin(9600); //シリアル通信開始 10 Wire.begin(); //I2C通信開始 11} 12 13void loop(void) { 14 uint16_t uiVal; //2バイト(16ビット)の領域 15 float fVal; 16 int iVal; 17 18 Wire.requestFrom(adt7410I2CAddress, 2); //2バイト要求 19 20 uiVal = (uint8_t)Wire.read() << 8; // 1バイト読み出しで上位にシフト 21 uiVal |= Wire.read(); // 1バイト読み出して下位にセット 22 23 uiVal >>= 3; // シフトで13bit化 24 25 if (uiVal & 0x1000) { // 13ビットで符号判定 26 iVal = uiVal - 0x2000; // マイナスの時 (10進数で8192) 27 } 28 else { 29 iVal = uiVal; //プラスの時 30 } 31 32 Signal = analogRead(SensorOutPin); // パルスセンサの値を読み込み 33 34 fVal = (double)iVal / 16.0; // 温度換算(摂氏) 35 36 sprintf(buff,"%f,%d",fVal,Signal); //sprintfで文字列に変換、二つの変数を結合 37 Serial.println(buff); 38 delay(1000); //1秒待つ 39}
Arduinoのシリアルモニタ(左側が体温、右側が脈拍の値となります)
?,536 ?,508 ?,512 ?,502 ?,522 ?,510 ?,519 ?,491
実行環境
Arduino IDE 1.8.15
Arduino UNO
体温センサ ADT7410
試したこと
そのままfloat型で表示した場合はちゃんとした値が表示されています。
心拍と脈拍の値を同時にSerial.printlnで出力したい為、sprintfで文字列にして結合させようと考えております。
「そのままfloat型で表示した場合」とは具体的にどういうコードでどういう操作をしたのですか?
回答3件
あなたの回答
tips
プレビュー