前回から、TinyBasicを用いた基盤で遊んでます。
前回はLEDを光らせるという単純なものででしたが今回は少し複雑な事をしていこうと思います。
今回は、キーボードを使ってステッピングモーターを回してみようと思います。
ステッピングモーターの回しかたはこちらをどうぞ。
まずはキーボードの右ボタンを押し続けると右回転
左ボタンを押し続けると左回転するような動き方をさせようと思います。
これでロボットやカメラやアンテナの位置制御などができそうです。
↓が実際のプログラムです。
#tinybasic
#2018/7/12
#kazurock
#stepingmotorをキーボード入力で回す:rep
a=@35
if a==0 then @40=0
if a==67 then gosub rroring
if a==68 then gosub lroring
goto rep
:rroring
@40=12
delay 10
@40=6
delay 10
@40=3
delay 10
@40=9
delay 10
return:lroring
@40=3
delay 10
@40=6
delay 10
@40=12
delay 10
@40=9
delay 10
return
@35という番地がキーボードの入力を読み込む番地になってます。
そんで、キーボードの右入力は数値でいうと67、左入力は68になります。ASCⅡコードですね。
たとえば、キーボードで右ボタンを押し続けると
gosub関数でrroringのプログラム場所まで飛びます。
そして、4ビットの出力に10msecごとに二相励磁を行います。
LEDを光らせたときと同様に@40には10進数で値を入力しています。
12→6→3→9 と意味がわかりませんが、2進数にすると
1100
↓
0110
↓
0011
↓
1001
となり、ステッピングモーターを二相励磁できます。
4ステップしたあと、またキーボードが押されているか確認して繰り返すという仕組みです。
実際の映像がこちら↓
もうひとつの制御はキーボードの値を入力して、入力した値分回るというプログラムです。
右回転は正の整数を入力すれば4ステップ×数値分回ります。
左回転は負の整数を入力すれば同様に回ります。
実際の映像はこちら↓
プログラムはこちら↓
#tinybasic
#2018/7/25
#kazurock
#stepingmotorをキーボード入力で回す:start
input b
if b>0 then gosub rrole
if b<0 then gosub lrole
@40=0
goto start:rrole
for a=1 to b
gosub r
next a
return:lrole
b=b*-1
for a=1 to b
gosub l
next a
return:r
@40=12
delay 1
@40=6
delay 1
@40=3
delay 1
@40=9
delay 1
return:l
@40=3
delay 1
@40=6
delay 1
@40=12
delay 1
@40=9
delay 1
return
こちらもほとんど一緒ですが、input関数を使ってキーボードから入力された数値をbに格納して、その数値の値分をfor関数を使ってステッピングモーターへ二相励磁の信号を送るというシンプルなものです。
このプログラムを応用すると高精度なステッピングモーターの位置制御ができそうなので、ステッピングモーターを2つ使ったりすると、天体観測の自動望遠鏡システムができそうなきがします。