こんにちは~!
毎週金曜日はいつもいつもカレーを食べるアールティ。
豆好きのわたしは毎度ダルカレーを頼むのですが、今回は売り切れでした…。
残念でした…。
そんな本日のマイクロマウス研修です。
実は先週の土曜日からずっと引きずっていた悔しさ。
九州地区大会でのモードスイッチの誤操作!
これを克服するべく、今回はプログラムをいじってみたいと思います。
思いま…す…。
どうやろうかしら。。
左から、モード送りボタン、決定ボタン、モード戻しボタンです。
この真ん中の決定ボタンさえ誤操作しなければ、GENIEちゃんは発進しないので、
こちらをいじってみようと思います。
プログラムを見てみると、
まず、
while( (SW_L & SW_C & SW_R)) ; //何れかのスイッチが押されるまで待つ
となっています。
Pi:Co Classicのスイッチはプルアップ回路なので、ONが0、OFFが1になります。
()内が1の場合はTrue、0の場合はfalseになります(そういうことなんだ~)。
また、&は「かける」の意味ですので、
何かひとつでもボタンが押されたら(0になったら)、1×1×0というようにカッコ内が0となり、
ループを抜け出して、その次のif文(どのスイッチが押されたかによって処理を分ける)に移るという仕組みです。
…と、さきほど佐倉さんに教えてもらいました。
すげーーーー!!
キレイな仕組みでできてるんですねえええ…!
ということで、書いてみました。
真ん中の決定ボタンを押した場合の処理を書いてある部分です。
else if(SW_C == SW_ON) //中央スイッチが押されていたら、現在のモードを実行する { knight_rider(1); while( (SW_L & SW_C & SW_R)) ; //何れかのスイッチが押されるまで待つ if(SW_C==SW_ON) //再度決定スイッチが押されるまで待つ { wait_ms(30); SET_BUZZER_FREQ(DEC_FREQ); //決定スイッチが押されたときの音を鳴らす ENABLE_BUZZER; //ブザーを発振させる wait_ms(80); //適当な待ち時間 SET_BUZZER_FREQ(INC_FREQ); //音(周波数)を変更する wait_ms(80); //適当な待ち時間 DISABLE_BUZZER; //ブザーの発振を停止させる exec_by_mode(mode); //現在のモードを実行する } }
決定ボタン一度押しでLEDがぎゅーん、
もう一度押すとピッといって選択されたモードを実行します。
やってみました。
むほほ。
いい感じです。
(ちなみに勿論一筋縄でここまで来れたわけではないですよ…。
先ほどなどはプログラムを書き間違えていて、GENIEちゃんがただの「決定ボタン押すとLEDがナイトライダーで光るだけロボット」になっていました。。。)
しかし、よく動画をご確認ください。
やはりネックは走行なのですよ。
九州中部と「あれ?もしかして姿勢制御してない?」と気になっていたのですが、
どうも左側に寄るようにして姿勢制御をかけているような感じがしています。
先ほどセンサーはTeratermで見直したのですが、
まだおかしいですね??
次回の課題です。