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

回答編集履歴

1

追記

2021/12/11 01:07

投稿

thkana
thkana

スコア7738

answer CHANGED
@@ -40,4 +40,33 @@
40
40
  モーター回転フラグがセットされていればモーター回転、そうでなければモーター停止
41
41
  0.01秒スリープ
42
42
  ```
43
- とか。
43
+ とか。
44
+
45
+ ---
46
+ 一番「普通」かも知れない状態マシンをやっていなかったか
47
+ ```
48
+ [擬似コード]
49
+ 状態変数に'通常回転'を代入
50
+ 無限ループ
51
+ 状態変数が'通常回転'? #センサーを見る
52
+ モーター回転フラグをセット
53
+ センサー値を得る
54
+ センサー反応有り?
55
+ カウントダウンタイマーに300を代入
56
+ 状態変数に'停止'を代入
57
+ else 状態変数が'停止'? #時間を測る
58
+ モーター回転フラグをリセット
59
+     カウントダウンタイマーを1減少
60
+     カウントダウンタイマーが0? #3秒経った?
61
+ カウントダウンタイマーにN*100を代入
62
+ 状態変数に'強制回転'を代入
63
+ else 状態変数が'強制回転'? #時間を測る
64
+ モーター回転フラグをセット
65
+     カウントダウンタイマーを1減少
66
+     カウントダウンタイマーが0? #N秒経った?
67
+ カウントダウンタイマーにN*100を代入
68
+ 状態変数に'通常回転'を代入
69
+ モーター回転フラグがセットされていればモーター回転、そうでなければモーター停止
70
+ 0.01秒スリープ
71
+ ```
72
+ 状態変数によって「やること」をバッサリ切り替えるから多分考えるのが楽。センサーを見たくないならセンサーを見ずにただ時間を測ればいい,とか。