少数じゃなくて小数、ね。
シリアル通信の話としては以前の回答を読んでおいて欲しいのですけれど。
要は、1バイトで送れない情報があるなら、送り側と受け側で何らかの規則を決めて、何バイトかをまとめて扱うようにしなきゃいけない、ということです。
で、シリアルモニターとArduinoでやるとしたら、お手軽なのはデータを改行で区切ることでしょう。
送る側は、データ毎にEnterキーを叩けばいいだけ。
受ける側は、 Serial.readStringUtil()関数に'\n'を引数として与えて、得られたStringデータ(例えば"1.2"、正確に言えば"1.2\r"だけど...)に対して.toFloat()メンバ関数を働かせれば小数データに戻せます。
サンプル。ただ数値を送り返してくるだけ。
Arduino
1void setup() {
2 Serial.begin(9600);
3}
4
5void loop() {
6 if (Serial.available()) {
7 String rcvd = Serial.readStringUntil('\n');
8 float data = rcvd.toFloat();
9 Serial.println(data);
10 }
11}
文字の'0'を引けば数値に変換出来るということは分かったのですが少数の時はどうすればいいのか
こちらを真面目に追求するならこんな感じで。
Arduino
1float data;
2bool afterDp = false; //小数点以下の処理中trueとする
3float weight = 1; //小数点以下の'重み'
4
5void setup() {
6 Serial.begin(9600);
7}
8
9void loop() {
10 if (Serial.available()) {
11 int rcvd = Serial.read();
12 if (rcvd == '\n') {
13 //改行だったら一つのデータ終わり
14 Serial.println(data);
15 //次のデータのために初期化
16 data = 0;
17 afterDp = false;
18 weight = 1;
19 } else if (rcvd == '.') {
20 //小数点発見を記録
21 afterDp = true;
22 } else if (isdigit(rcvd)) {
23 //数字だったら
24 if (afterDp) {
25 //小数部の処理
26 weight /= 10;
27 data = data + (rcvd - '0') * weight;
28 } else {
29 //整数部の処理
30 data = data * 10 + rcvd - '0';
31 }
32 }
33 }
34}