回答編集履歴

1

追記

2020/10/27 03:42

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -157,3 +157,85 @@
157
157
  ```
158
158
 
159
159
  とりあえず動かしてみただけですので、タスク管理まわりほんとに大丈夫?というところはあるかも。
160
+
161
+
162
+
163
+ LED追加。loop()差し替え。ここもスレッドを立てろの声もあるかも知れないけど「普通」に処理。で、millis()使ったヨ。
164
+
165
+ ```Arduino
166
+
167
+ unsigned long t0;
168
+
169
+ bool ledStat;
170
+
171
+ void loop() {
172
+
173
+ static bool lastSense = false;
174
+
175
+ unsigned long currentTime=millis();
176
+
177
+ bool currentSense = digitalRead(My_sensor);
178
+
179
+ if (!currentSense) {//センサー不感
180
+
181
+ ledcWriteTone(1, 0);
182
+
183
+ if (th1) { //タスクがあるなら
184
+
185
+ vTaskDelete(th1); //タスク終了
186
+
187
+ }
188
+
189
+ th1 = NULL;
190
+
191
+ ledStat=false;
192
+
193
+ } else {
194
+
195
+ if (!lastSense) {//センサーがOFF->ONになったとき
196
+
197
+ //音を鳴らすタスク起動
198
+
199
+ xTaskCreatePinnedToCore(
200
+
201
+ task1,
202
+
203
+ "Task1",
204
+
205
+ 1024,//スタックサイズ 妥当性の検討はしていない
206
+
207
+ NULL,
208
+
209
+ 8,//タスク優先度 妥当性の検討はしていない
210
+
211
+ &th1,
212
+
213
+ 0 //CPU番号。loop()はCPU1で実行される
214
+
215
+ );
216
+
217
+ delay(1);//タスク起動を待つ。 妥当性の検討はしていない
218
+
219
+ t0=currentTime;
220
+
221
+ ledStat=true;
222
+
223
+ }
224
+
225
+ if(currentTime-t0>BEAT){
226
+
227
+ ledStat=!ledStat;
228
+
229
+ t0=currentTime;
230
+
231
+ }
232
+
233
+ }
234
+
235
+ lastSense = currentSense;
236
+
237
+ digitalWrite(Sensor_LED,ledStat);
238
+
239
+ }
240
+
241
+ ```