回答編集履歴

1

回答に追記

2020/05/16 05:44

投稿

y_waiwai
y_waiwai

スコア87774

test CHANGED
@@ -1,3 +1,113 @@
1
1
  delayを使うと止まるので使ってはダメです
2
2
 
3
3
  待つ時間分の時刻を算出して、その時刻に到達したかどうかを判定するようにし、到達してない場合はそのままリターンするなり終了するなりしましょう
4
+
5
+
6
+
7
+ ---
8
+
9
+
10
+
11
+ ```Arduino
12
+
13
+ unsigned long timo_set(int ms)
14
+
15
+ {
16
+
17
+ return mills()+ms;
18
+
19
+ }
20
+
21
+
22
+
23
+ bool timo_chk(unsigned long tim)
24
+
25
+ {
26
+
27
+ long a=tim - mills();
28
+
29
+ return a<0;
30
+
31
+ }
32
+
33
+
34
+
35
+ unsigned long timer;
36
+
37
+ int flag;
38
+
39
+
40
+
41
+ void loop() {
42
+
43
+ if(flag){
44
+
45
+ if(timo_chk(timer)){
46
+
47
+ digitalWrite(1, LOW);
48
+
49
+ digitalWrite(2, LOW);
50
+
51
+ digitalWrite(3, LOW);
52
+
53
+ }
54
+
55
+ flag=false;
56
+
57
+ }
58
+
59
+ int var = Serial.read();
60
+
61
+ if(var<0) return;
62
+
63
+
64
+
65
+ switch (var) {
66
+
67
+ case '1':
68
+
69
+ Serial.write(1);
70
+
71
+ digitalWrite(1, HIGH);
72
+
73
+ timer=timo_set(1000);
74
+
75
+ flag=true;
76
+
77
+ break;
78
+
79
+
80
+
81
+ case '2':
82
+
83
+ Serial.write(2);
84
+
85
+ digitalWrite(2, HIGH);
86
+
87
+ timer=timo_set(10);
88
+
89
+ flag=true;
90
+
91
+ break;
92
+
93
+
94
+
95
+ case '3':
96
+
97
+ Serial.write(3);
98
+
99
+ digitalWrite(3, HIGH);
100
+
101
+ timer=timo_set(10);
102
+
103
+ flag=true;
104
+
105
+ break;
106
+
107
+ }
108
+
109
+
110
+
111
+ ```
112
+
113
+ #素で書いてるので動作の保証はしない