こんにちは!
昨日までの四日間、お休みを頂いて実家に帰省しました。
1歳の姪にジェニちゃんを見せると(手を触れないように注意しながら)、動くわ光るわ音が出るわで、
他のどんなおもちゃより興味深そうに観察していましたw
アンパンマンそっちのけですw
父が私のはんだづけを吟味している様子。
ちょっとほめられましたw
精密機器なので用心しながら持ち歩かなければならないのですが、
がんばって持って帰った甲斐がありました♪
さて、今日のマイクロマウス研修です。
先日はPMWについてレクチャーを受けるもその深遠な世界を前に挫折しました。
PMWは、様々なものに通ずる(がしかし通り一遍の仕組みだけで動くわけではない…にくい…)事柄ということで非常に重要なのですが、
追々勉強していきましょうということになり、
今日は、run.cに入っているstraight関数の中身をじっくり見てみました。
straight関数は、ズバリ「直線走行」をするプログラムです。
音を鳴らされたり、LEDをぴかぴかさせられたりしているジェニちゃんも、本業は「走行」!
その肝がこの関数というわけです。
前提として今日いまさら「そうなのか!」と思ったことは、
先日のジェニちゃんにおける時間の感覚のなぞと同じく、距離の感覚はどうなってるんだろう、ということ。
のり先生によると、ジェニちゃんはモータのステップ数を距離に換算して把握しているそうです。
macro.hにそれが書いてあります。
ジェニちゃんのモータは0.9度刻みで1ステップとなります。
ですから、0.9/360=400、つまり400ステップでタイヤが一回転するということです。
また、ジェニちゃんのタイヤが一回転したときの走行距離はもちろんタイヤの円周に等しく、
円周を求める式は「直径×円周率」なので、
1ステップごとに「直径×π/400 mmsec」進んでいるということになりますね!(ふう、義務教育をなんとかかんとか思い出しながらのり先生の説明を理解しました…)
さてさてその前提を踏まえて
以下がstraight関数の全貌です。
見ての通り、とてもわかりやすーいプログラム!(ではないですか?) 基本はwhile文のループで、条件がなりたたなくなったらヒョイヒョイと次へと移っていくシンプルな構造です。 これならわたしにもわかります。(細かい計算はのり先生の解説が必要です…。) 特にこの部分が「なるほど!」という感じでした。
((len※走るべき距離 – STEP2LEN(step_r + step_l) ※カウントされゆく走っている距離) がどんどん減っていき、
( ((speed*speed) –
…