回答編集履歴

1

追記

2021/03/30 08:43

投稿

thkana
thkana

スコア7733

test CHANGED
@@ -39,3 +39,69 @@
39
39
 
40
40
 
41
41
  ライブラリは1.0.6です (あぁ、[issue](https://teratail.com/questions/326026)まだやってなかった)
42
+
43
+
44
+
45
+ ---
46
+
47
+
48
+
49
+ あ、もしかして...
50
+
51
+ 上記はSerial2は無入力で試したのですが、
52
+
53
+ HardwareSerialはStreamを継承していて、
54
+
55
+ ```Arduino
56
+
57
+ String Stream::readStringUntil(char terminator)
58
+
59
+ {
60
+
61
+ String ret;
62
+
63
+ int c = timedRead();
64
+
65
+ while(c >= 0 && c != terminator) {
66
+
67
+ ret += (char) c;
68
+
69
+ c = timedRead();
70
+
71
+ }
72
+
73
+ return ret;
74
+
75
+ }
76
+
77
+ ```
78
+
79
+ ```Arduino
80
+
81
+ int Stream::timedRead()
82
+
83
+ {
84
+
85
+ int c;
86
+
87
+ _startMillis = millis();
88
+
89
+ do {
90
+
91
+ c = read();
92
+
93
+ if(c >= 0) {
94
+
95
+ return c;
96
+
97
+ }
98
+
99
+ } while(millis() - _startMillis < _timeout);
100
+
101
+ return -1; // -1 indicates timeout
102
+
103
+ }
104
+
105
+ ```
106
+
107
+ だから、データが流れ込んでいる限りreadStringUntil()はタイムアウトしないのでは?