子供運転会
今月末のイベントで子供たちの運転会を行います。手持ちの線路が無い事と確保できる場所が狭い事からセンサーで自動往復させますが、なにも操作出来ない完全自動運転では子供たちは退屈でしょうから、スピード調整をミント缶の操作で行えるようスケッチを修正しました。最高スピードは自動運転スケッチのパラメータで決まりますが、ミント缶が自動運転のスピードより遅ければミント缶のスピードで走行します。

自動運転解除
センサーの感度を調整して動作を確認するには完全手動モードも必要なので、基板の製造ミスでGNDに落ちていたスイッチのランドを削ってコメントアウトしていた自動開始スイッチを有効にしました。ミント缶でスピードを上げた状態で自動解放スイッチを押すと自動運転スケッチの速度制限が解除されロコが暴走する可能性があるので、ミント缶本体のスケッチも変更しました。R1.3e、R1.5のスケッチでは自動解除コマンド受信で即オフにしていたbIICLocalAddrフラグ
void processFromIIC()
{
switch(iic.Cmd) {
case CMD_NOP:
processSendPacket(CMD_DIR, addr, GO_FWD);
processSendPacket(CMD_SPD, addr, 0);
bIICLocalAddr = false;
break;
これを
void processFromIIC()
{
switch(iic.Cmd) {
case CMD_NOP:
processSendPacket(CMD_DIR, addr, GO_FWD);
processSendPacket(CMD_SPD, addr, 0);
bIICLocalPending = true;
break;
で解除ペンディングフラグを立てて
void processDial()
{
if(gCurSpeed != gLastSpeed)
{
if((aStep == 0) && (bIICLocalPending = true)) {
bIICLocalAddr = false;
}
で、スピードが0になったら自動解除する事にしました。
センサーディテクタ側は電源オンでセンサー検出を開始しますが、停止ボタンを押すとセンサー検出を停止して完全手動モードになり、開始ボタンで検出を再開します。
子供たちは手当たり次第にボタンを押しまくりますが、これでロコが線路から飛び出す事は避けられそうです。停止センサー付きの車止めを作れば安心ですが、準備が間に合いそうに無く今回はここまでとします。ミント缶のボタンも押しまくって『動かなくなった』と怒られるので、ロコアドレスを固定するKidsModeも追加する事にします。
更新スケッチを公開
変更したミント缶IVスケッチはR1.3fとR1.5bで、ウェッブページのミント缶履歴にアップしました。またR1.5基板はボタンの読み込みをアナログポートに変更した事で、R1.3以前の基板と方向反転論理が反対でしたので、R1.3と同じ論理になるよう修正しました。R1.3はメモリ節約目的の自前printfで100から109までのゼロサプレスに不具合があったので修正しました。
センサーディテクタスケッチはミント缶IV-I2C通信ページのサンプルスケッチをβ2に更新しました。
最近のコメント