Arduinoと無線モジュールを使用し、データの送受信のテストをしています。
受信した文字列の一部を10進数の数値に変換したいです。
Arduinoが受信して表示する値は以下のような文字列となっています。
00,0002,DA: 25.47
送信側で送信しているのは25.47といった値のみで、値の受信時に、25.47より左の情報が付与されるようです。
このうち、DAはRSSIを示しており、16進数の値です。
DAの部分を切り出し、切り出した16進数の文字列を10進数に変換して、数値として表示させたいです。
調べたところ、strtol関数を使うと良いとのことでしたので、strtol関数で変換してみましたが、DA=-38になるはずが、218と表示され、うまく変換できていないようです。
スケッチは以下のようになっています。
Arduino
1#include <SoftwareSerial.h> 2 3SoftwareSerial IM920Serial(8, 9); // RX, TX 4 5void setup() { 6 Serial.begin(19200); 7 IM920Serial.begin(19200); 8} 9 10void loop() { 11 if (IM920Serial.available()) { //データが送られてきたら 12 String input = IM920Serial.readString(); //シリアル値をString型で読み取る 13 Serial.print(input); //読み取った文字列を出力 14 delay(1); 15 16 String rs = input.substring(8,10);//読み取った文字列の一部を文字列として切り出し 17 char Buf[50]; 18 rs.toCharArray(Buf, 50); 19 Serial.println(Buf); 20 int num = strtol(Buf,NULL,16);//16進数→10進数に変換 21 Serial.println(num); 22 23 delay(1); 24 } 25} 26
修正点等のアドバイスを頂きたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/28 02:41