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

回答編集履歴

1

回答に追記

2020/05/16 05:44

投稿

y_waiwai
y_waiwai

スコア88178

answer CHANGED
@@ -1,2 +1,57 @@
1
1
  delayを使うと止まるので使ってはダメです
2
- 待つ時間分の時刻を算出して、その時刻に到達したかどうかを判定するようにし、到達してない場合はそのままリターンするなり終了するなりしましょう
2
+ 待つ時間分の時刻を算出して、その時刻に到達したかどうかを判定するようにし、到達してない場合はそのままリターンするなり終了するなりしましょう
3
+
4
+ ---
5
+
6
+ ```Arduino
7
+ unsigned long timo_set(int ms)
8
+ {
9
+ return mills()+ms;
10
+ }
11
+
12
+ bool timo_chk(unsigned long tim)
13
+ {
14
+ long a=tim - mills();
15
+ return a<0;
16
+ }
17
+
18
+ unsigned long timer;
19
+ int flag;
20
+
21
+ void loop() {
22
+ if(flag){
23
+ if(timo_chk(timer)){
24
+ digitalWrite(1, LOW);
25
+ digitalWrite(2, LOW);
26
+ digitalWrite(3, LOW);
27
+ }
28
+ flag=false;
29
+ }
30
+ int var = Serial.read();
31
+ if(var<0) return;
32
+
33
+ switch (var) {
34
+ case '1':
35
+ Serial.write(1);
36
+ digitalWrite(1, HIGH);
37
+ timer=timo_set(1000);
38
+ flag=true;
39
+ break;
40
+
41
+ case '2':
42
+ Serial.write(2);
43
+ digitalWrite(2, HIGH);
44
+ timer=timo_set(10);
45
+ flag=true;
46
+ break;
47
+
48
+ case '3':
49
+ Serial.write(3);
50
+ digitalWrite(3, HIGH);
51
+ timer=timo_set(10);
52
+ flag=true;
53
+ break;
54
+ }
55
+
56
+ ```
57
+ #素で書いてるので動作の保証はしない