micro:bit戦車を旋回だけじゃなくカーブ走行ができるようにする - 変数での状態制御 -
この記事は micro:bit Advent Calendar 2018 の 16日目の記事です。
前回 別のマイクロビットから無線で操縦できるようにしましたが 今までの方向転換方法は、左右のキャタピラの回転を逆転する事によって行っていました。
プログラムで言えば下記のような形です。
カーブ する関数を作成
前に進んでて『左右にカーブ』したい時ってあるんですよ。
『旋回』じゃなくって!
って事でまずはカーブする関数を作成。
関数 turnLeft(旋回)の時は右のキャタピラを前回転、左のキャタピラを後ろ回転でしたが、「カーブ」させたいので、左のキャタピラも少しだけ前進させています。
カーブコマンドのタイミング
せっかくカーブする関数を作りはしたものの、どういう操作でこれを呼び出すか?
今までは
micro:bit を傾けた状態で A+Bボタンを押す
という操作で旋回させていました。
最初は傾き具合によって『旋回』『カーブ』を切り替えようとしたのですが、傾き具合の検出がうまく安定させられず、操縦者が意図した操作を確実にさせられないのはよくないので再考。
結局
走行中に曲がる指示を出したらカーブ。
停止中に曲がる指示を出したら旋回。
という仕様にしました。
走行状態を変数に格納
『今 走行中なのかどうか?』という走行状態を変数に持たせて管理するわけですが、今回は
is_forward = 1 ... 前進中
is_back = 1 ... 後退中
という形で管理し、送信機の micro:bit から送られてくる信号は
0: 停止
1: 前進
2: 後退
3: 右
4: 左
だけですが、例えば
3(右)を受信した時に is_forward が 1 の時には 右前カーブの関数
3(右)を受信した時に is_back が 1 の時には 右後カーブの関数
3(右)を受信した時に どちらでもなかったら旋回の関数
を実行しています。
操作したらこんな感じ!
ちなみにご覧の通り超音波距離センサーを既に搭載してるので、今度は距離センサーを活用した制御を取り入れたいと思います。
投稿者プロフィール
-
名古屋のウェブ制作会社数社に10年程度務めた後、株式会社ベクトル設立。
企画・運営・コンサルティング〜WordPressを中心としたシステム開発まで幅広く携わる。
[ 著書 ]
・いちばんやさしいWordPressの教本(共著)
・現場でかならず使われているWordPressデザインのメソッド(共著)
[ 最近のWordPressコミュニティでの活動 ]
2018 WordCampOsaka セッションスピーカー
2017 WordCampKyoto セッションスピーカー
2016 WordCampTokyo LT
2016 WordCampKansai ハンズオン世話役
2015 WordCampTokyo セッションスピーカー
2015 WordCampKansai セッションスピーカー
2014 WordFesNagoya 実行委員 & セッションスピーカー
2013 WordCampTokyo セッションスピーカー(パネラー)
2013 WordFesNagoya 実行委員 & セッションスピーカー
2013 WordCrabFukui セッションスピーカー
他