質問編集履歴

3

追記

2023/05/07 15:54

投稿

Uka
Uka

スコア28

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

誤字の修正

2023/05/07 15:36

投稿

Uka
Uka

スコア28

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

試したことのプログラムを追加

2023/05/07 15:33

投稿

Uka
Uka

スコア28

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
+