BasicStamp用 お掃除ロボットプログラム
' {$STAMP BS2} ' {$PBASIC 2.5} ' {$PORT COM3} 'お掃除ロボット制御プログラム Ver2.1 ' '四角い部屋の縁に沿って動く。はじめは右側の縁に沿って動き,縁に一定回数センサーがはみ出すと '逆側の縁に沿って動くようになる。正面のマイクロスイッチが押されると180度回転して止まる。 '止まった状態から動作を開始させるためには,大きな音で柏手を打つとスタートする。 ' '初期設定 Front con %1010 '前進 Back con %0101 '後退 T_r con %0001 '右に旋回 T_l con %0100 '左に旋回 R_r con %1001 '右回りに回転 R_l con %0110 '左回りに回転 Sto con %0000 'ストップ B_r con %1111 'ブレーキ ' inb = %7654 ' inb = %1000 正面衝突 8 ' = %0100 音センサー動作 4 ' = %0010 右脱輪注意 2 ' = %0001 左脱輪注意 1 ' = %0011 脱輪注意 3 dirc = %1111 ' bit8,9,10,11 output ,m_otor outc dird = %1111 ' bit12,12,14,15 output ,LED_ outd dirb = %0000 ' bit4,5,6,7 input センサー c var inl.bit7 '1 で正面衝突 b var inl.bit6 'マイク出力 r var inl.bit5 '1 で右脱輪注意 l var inl.bit4 '1 で左脱輪注意 i var word 'センサー動作回数カウンター t var nib '現在のセンサー値を保存する tb var nib '前回のセンサーの値を保存 tg var nib '回転方向フラグ 1:左回転(反時計) 0:右回り(時計回り) tg=0 re: '+++++++++++++++++++++ 再スタート +++++++++++++++++++++++++++++++++++++++++++++++ if tg=1 then tg=0 else tg=1 outc=Sto 'プログラム例 読み込みピン変数を参照するだけで良い do while(b<>1) 'c<>1 音センサーの値が変化 1 に鳴るまで待つ outd=inb loop outc=front i=0 tb=inb t=inb st:'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '******************* センサー読み込み 変化するまでまつ do while (t=tb) t=inb outd=t loop tb=t i=i+1 '****************** A3面積を走行するのに10秒 iの値で60ぐらい if i=100 then if tg=1 then tg=0 else tg=1 i=0 endif 'debug bin4 t,cr select t case %1000 outc=Sto gosub jyuuden outc = Sto goto re case %0000 outc = front case %0011 outc =Back case %0010 if tg=1 then outc =T_l else outc=T_r case %0001 if tg=1 then outc =T_l else outc=T_r case else outc = Sto endselect goto st '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ jyuuden: '************************ 車庫に到達し,180度回転し 車庫入れ if tg=0 then '時計回りで侵入 outc=Back pause 1000 '回転角度はモータの動作時間で決めている。 outc = R_l '電池の電圧で回転数は変化するので時間の調整必要 pause 2500 outc=Sto else '反時計回りで侵入 outc=Back pause 1000 outc=R_r pause 2500 outc=Sto endif outc=Back pause 1500 outc = Sto return