質問編集履歴
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -193,12 +193,12 @@
|
|
193
193
|
```
|
194
194
|
|
195
195
|
### 試したこと(下記プログラム)
|
196
|
-
Task1の内容を単独で動作させることはできています(速度スイッチを押すと速度だけが変化し、距離スイッチを押すと移動距離だけが変化)
|
196
|
+
RTOSを使用せず、Task1の内容(モーター制御+割り込み)を単独で動作させることはできています(速度スイッチを押すと速度だけが変化し、距離スイッチを押すと移動距離だけが変化)
|
197
197
|
|
198
198
|
```C
|
199
|
-
#include <freertos/FreeRTOS.h>
|
199
|
+
//#include <freertos/FreeRTOS.h>
|
200
|
-
#include "SparkFun_Qwiic_Scale_NAU7802_Arduino_Library.h"
|
200
|
+
//#include "SparkFun_Qwiic_Scale_NAU7802_Arduino_Library.h"
|
201
|
-
NAU7802 myScale;
|
201
|
+
//NAU7802 myScale;
|
202
202
|
#include <SPI.h>
|
203
203
|
|
204
204
|
volatile float Hz = 1000; //この変数は割り込み処理とモーター制御(osc_stdで共有)
|
2
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -113,7 +113,7 @@
|
|
113
113
|
}
|
114
114
|
}
|
115
115
|
|
116
|
-
void task2( void *param ) //
|
116
|
+
void task2( void *param ) //センシング+データ解析
|
117
117
|
{
|
118
118
|
while ( 1 ) {
|
119
119
|
//プログラム省略(センシング+データ解析部分)
|
1
試したことのプログラムを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -195,7 +195,132 @@
|
|
195
195
|
### 試したこと(下記プログラム)
|
196
196
|
Task1の内容を単独で動作させることはできています(速度スイッチを押すと速度だけが変化し、距離スイッチを押すと移動距離だけが変化)
|
197
197
|
|
198
|
-
|
198
|
+
```C
|
199
|
-
|
199
|
+
#include <freertos/FreeRTOS.h>
|
200
|
-
|
200
|
+
#include "SparkFun_Qwiic_Scale_NAU7802_Arduino_Library.h"
|
201
|
-
|
201
|
+
NAU7802 myScale;
|
202
|
+
#include <SPI.h>
|
203
|
+
|
204
|
+
volatile float Hz = 1000; //この変数は割り込み処理とモーター制御(osc_stdで共有)
|
205
|
+
volatile float distance = 20; //この変数は割り込み処理とモーター制御(osc_stdで共有)
|
206
|
+
int strain_level = 1;
|
207
|
+
int Hz_level = 1;
|
208
|
+
|
209
|
+
void distance_controll() { //移動距離を3段階で切替可能
|
210
|
+
if (strain_level == 0) {
|
211
|
+
distance = 10;
|
212
|
+
strain_level = 1;
|
213
|
+
delay(100);
|
214
|
+
}
|
215
|
+
else if (strain_level == 1) {
|
216
|
+
distance = 20;
|
217
|
+
strain_level = 2;
|
218
|
+
delay(100);
|
219
|
+
}
|
220
|
+
else if (strain_level == 2) {
|
221
|
+
distance = 30;
|
222
|
+
strain_level = 0;
|
223
|
+
delay(100);
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
void Hz_controll() { //速度を5段階で切替可能
|
228
|
+
if (Hz_level == 0) {
|
229
|
+
Hz = 1000; //速度1
|
230
|
+
Hz_level = 1;
|
231
|
+
delay(100);
|
232
|
+
}
|
233
|
+
else if (Hz_level == 1) {
|
234
|
+
Hz = 450; //速度2
|
235
|
+
Hz_level = 2;
|
236
|
+
delay(100);
|
237
|
+
}
|
238
|
+
else if (Hz_level == 2) {
|
239
|
+
Hz = 260; //速度3
|
240
|
+
Hz_level = 3;
|
241
|
+
delay(100);
|
242
|
+
}
|
243
|
+
else if (Hz_level == 3) {
|
244
|
+
Hz = 125; //速度4
|
245
|
+
Hz_level = 4;
|
246
|
+
delay(100);
|
247
|
+
}
|
248
|
+
else if (Hz_level == 4) {
|
249
|
+
Hz = 47; //速度5
|
250
|
+
Hz_level = 0;
|
251
|
+
delay(100);
|
252
|
+
}
|
253
|
+
}
|
254
|
+
|
255
|
+
// 割り込みハンドラ
|
256
|
+
// IMPUT_PIN HIGH→LOW
|
257
|
+
//
|
258
|
+
void switchON_dist() {
|
259
|
+
|
260
|
+
// 割り込みフラグ設定
|
261
|
+
interruptState_dist = 1;
|
262
|
+
}
|
263
|
+
|
264
|
+
void switchON_hz() {
|
265
|
+
|
266
|
+
// 割り込みフラグ設定
|
267
|
+
interruptState_hz = 1;
|
268
|
+
}
|
269
|
+
|
270
|
+
|
271
|
+
void setup()
|
272
|
+
{
|
273
|
+
Serial.begin(115200);
|
274
|
+
Wire.begin();
|
275
|
+
delay(50);
|
276
|
+
|
277
|
+
pinMode(33, OUTPUT); //motor driver dir
|
278
|
+
pinMode(25, OUTPUT); //motor driver stp
|
279
|
+
pinMode(14, OUTPUT); //M0
|
280
|
+
pinMode(27, OUTPUT); //M1
|
281
|
+
pinMode(26, OUTPUT); //M2
|
282
|
+
pinMode(32, INPUT); //
|
283
|
+
pinMode(35, INPUT); //
|
284
|
+
pinMode(36, INPUT); //Hz
|
285
|
+
pinMode(39, INPUT); //distance
|
286
|
+
|
287
|
+
digitalWrite(14, LOW);
|
288
|
+
digitalWrite(27, HIGH);
|
289
|
+
digitalWrite(26, LOW);
|
290
|
+
|
291
|
+
attachInterrupt(39, switchON_dist, FALLING); //移動距離スイッチを押したときに割り込み処理を実行
|
292
|
+
attachInterrupt(36, switchON_hz, FALLING); //速度スイッチを押したときに割り込み処理を実行
|
293
|
+
msTime_dist = millis();
|
294
|
+
msTime_hz = millis();
|
295
|
+
}
|
296
|
+
|
297
|
+
void loop()
|
298
|
+
{
|
299
|
+
osc_std(); //モーター制御関数
|
300
|
+
if (interruptState_dist) { // 割り込み発生
|
301
|
+
if ((millis() - msTime_dist) > 50) { // 50ミリ秒以下の割り込みは無視する
|
302
|
+
distance_controll();
|
303
|
+
osc_std();
|
304
|
+
msTime_dist = millis(); // 割り込み時刻更新
|
305
|
+
}
|
306
|
+
interruptState_dist = 0; // 割り込みフラグOFF
|
307
|
+
}
|
308
|
+
|
309
|
+
if (interruptState_hz) { // 割り込み発生
|
310
|
+
if ((millis() - msTime_hz) > 50) { // 50ミリ秒以下の割り込みは無視する(チャタリング回避)
|
311
|
+
Hz_controll();
|
312
|
+
osc_std();
|
313
|
+
msTime_hz = millis(); // 割り込み時刻更新
|
314
|
+
|
315
|
+
}
|
316
|
+
interruptState_hz = 0; // 割り込みフラグOFF
|
317
|
+
}
|
318
|
+
}
|
319
|
+
|
320
|
+
void osc_std() {
|
321
|
+
//省略(モーター駆動)
|
322
|
+
}
|
323
|
+
```
|
324
|
+
|
325
|
+
|
326
|
+
|