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