teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

サンプル追加

2019/12/21 08:35

投稿

thkana
thkana

スコア7735

answer CHANGED
@@ -20,4 +20,44 @@
20
20
  Serial.println(data);
21
21
  }
22
22
  }
23
+ ```
24
+ > 文字の'0'を引けば数値に変換出来るということは分かったのですが少数の時はどうすればいいのか
25
+
26
+ こちらを真面目に追求するならこんな感じで。
27
+
28
+ ```Arduino
29
+ float data;
30
+ bool afterDp = false; //小数点以下の処理中trueとする
31
+ float weight = 1; //小数点以下の'重み'
32
+
33
+ void setup() {
34
+ Serial.begin(9600);
35
+ }
36
+
37
+ void loop() {
38
+ if (Serial.available()) {
39
+ int rcvd = Serial.read();
40
+ if (rcvd == '\n') {
41
+ //改行だったら一つのデータ終わり
42
+ Serial.println(data);
43
+ //次のデータのために初期化
44
+ data = 0;
45
+ afterDp = false;
46
+ weight = 1;
47
+ } else if (rcvd == '.') {
48
+ //小数点発見を記録
49
+ afterDp = true;
50
+ } else if (isdigit(rcvd)) {
51
+ //数字だったら
52
+ if (afterDp) {
53
+ //小数部の処理
54
+ weight /= 10;
55
+ data = data + (rcvd - '0') * weight;
56
+ } else {
57
+ //整数部の処理
58
+ data = data * 10 + rcvd - '0';
59
+ }
60
+ }
61
+ }
62
+ }
23
63
  ```