回答編集履歴

1

追記

2021/12/11 01:07

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -83,3 +83,61 @@
83
83
  ```
84
84
 
85
85
  とか。
86
+
87
+
88
+
89
+ ---
90
+
91
+ 一番「普通」かも知れない状態マシンをやっていなかったか
92
+
93
+ ```
94
+
95
+ [擬似コード]
96
+
97
+ 状態変数に'通常回転'を代入
98
+
99
+ 無限ループ
100
+
101
+ 状態変数が'通常回転'? #センサーを見る
102
+
103
+ モーター回転フラグをセット
104
+
105
+ センサー値を得る
106
+
107
+ センサー反応有り?
108
+
109
+ カウントダウンタイマーに300を代入
110
+
111
+ 状態変数に'停止'を代入
112
+
113
+ else 状態変数が'停止'? #時間を測る
114
+
115
+ モーター回転フラグをリセット
116
+
117
+     カウントダウンタイマーを1減少
118
+
119
+     カウントダウンタイマーが0? #3秒経った?
120
+
121
+ カウントダウンタイマーにN*100を代入
122
+
123
+ 状態変数に'強制回転'を代入
124
+
125
+ else 状態変数が'強制回転'? #時間を測る
126
+
127
+ モーター回転フラグをセット
128
+
129
+     カウントダウンタイマーを1減少
130
+
131
+     カウントダウンタイマーが0? #N秒経った?
132
+
133
+ カウントダウンタイマーにN*100を代入
134
+
135
+ 状態変数に'通常回転'を代入
136
+
137
+ モーター回転フラグがセットされていればモーター回転、そうでなければモーター停止
138
+
139
+ 0.01秒スリープ
140
+
141
+ ```
142
+
143
+ 状態変数によって「やること」をバッサリ切り替えるから多分考えるのが楽。センサーを見たくないならセンサーを見ずにただ時間を測ればいい,とか。