モーターを動かしロボットを前進させる

ど素人は、とにかくロボットの見た目を完成させようとします。はっきり言って、これは無駄な行動です。
一気に完成品ができる人は天才しかいません。普通の人は普通の方法で開発しましょう。
見た目を格好よくしたところで、動くとは限らず、逆に動きを制限したり足を引っ張ったりします。
ですから、とにかく最低限の構成で動くかをチェックし、正常に動作したら機能を付け加えます。
そして、その付け加えられた機能が正しく機能するかをチェックするように開発していきます。
そらに、この機能に応じて、見た目も少しずつ変更していきます。
このように少しずつ開発していかないと、何処が問題なのかが分からなくなります。
格好ばかり気にしている人はロボットではなく機能しない単なるオブジェを作っているだけです。
ロボットに命を吹き込むのはプログラムです。プログラムがなければただのオブシェです。
ブログラムの無いロボットは単に小学生の夏休みの工作と同じです。
とにかく、一番はじめはモーターを動かし、前進、後進、回転などができるようにします。

その前に、一つの関数を作っておきます。
電源スイッチを入れたとたんにロボットが動くようだったら、うまくコースに置いたりテストしない限り正常なのかどうか分かりません。ですから、電源スイッチを入れてから、コースあるいはテスト状態にしてから押しボタン(プッシュスイッチ)を押してスタートにした方が安心です。まず、この関数から作ります。

初期化をしてプッシュスイッチが押されるまで待つ
void startInit(char* str)
{
  const BYTE MainCycle = 60;
  Init((BYTE)MainCycle);        //CPUの初期設定
  InitSci3(CBR_9600,non,1);     // シリアル転送設定(printf)
  Mtr_Run(0, 0, 0, 0);          // これをやらないと色々と動かない。モーター停止
  while(!getSW());              // スイッチが押されるまで待つ
  printf(str);
}


モーターは4個付けることが出来るようになっていますが、ここでは2つ付けるようになっています。
正しい極性でモーターが接続されているならば、次のプログラムで前進します。

前進させるプログラム
#include "vs-wrc003.h"
void startInit(char* str);
void main()
{
    startInit("motor check\n");
    Mtr_Run(80,80,0,0);
    while(1);
}
 1 
 2 プロトタイプ宣言
 3 
 4 
 5 初期化
 6 モーターのスピード設定。前進
 7 指令の停止。
 8 


上のプログラムは指令(命令)の停止をしていますから、最後の命令を受けたままそれを永久に実行します。止まれという命令が来るか、障害物にぶつかるか、電池が切れるまで前進します。

前進させ、一秒後に停止させる

main関数のみ提示します。その他は上のプログラムを参考にしてください。
一秒間だけモーターを動かすには、一秒を数えるものがあればできます。
それには、Wait関数を用います。
C言語での関数とは、javaあるいはC#言語のメソッドに相当します。

前進させ、一秒後に停止させる
void main()
{
    startInit("forward and stop\n");
    Mtr_Run(80,80,0,0);
    Wait(1000);
    Mtr_Run(0,0,0,0);
    while(1);
}
 1 main関数はそのプログラムで一つだけ
 2 
 3 初期化
 4 モーターのスピード設定。前進
 5 1000ms(1000ミリ秒=1秒)指令の停止
 6 左右のモーターのスピードを0にする
 7 永久に指令の停止。
 8 


モーターを動かしロボットを回転させる

ここでは、回転とは進行方向が同じで、左右のスピードが異なることを言うことにします。「独楽(コマ)を回す」ような意味ではありません。独楽を回すような動きは、超信地旋回(ちょうしんちせんかい)と言い、油圧ショベルや戦車などのクローラー(キャタピラ)を持つ車輌が左右のクローラーを同速度で互いに反対に回転させて、移動することなく車体の向きを変えることをいい、その場で旋回すると言います。

モーターを動かしロボットを回転させる
void main()
{
    startInit("turn check\n");
    Mtr_Run(80,60,0,0);
    Wait(1000);
    Mtr_Run(0,0,0,0);
    while(1);
}
 1 
 2 
 3 
 4 左右のモーターのスピードを変える
 5 時間待ち
 6 モーターの停止
 7 永久に指令の停止。
 8


ロボットを旋回させる

左右の車輪を同速度で互いに反対に回転させ、その場で旋回させます。

ロボットを旋回させる
void main()
{
    startInit("pivot check\n");
    Mtr_Run(80,-80,0,0);
    Wait(1000);
    Mtr_Run(0,0,0,0);
    while(1);
}
 1 
 2 
 3 
 4 左右のモーターの回転を逆にする
 5 時間待ち
 6 モーターの停止
 7 永久に指令の停止。
 8


課題
1秒前進し、90度右旋回し、1秒前進し、左に回転2秒し停止するプログラムを作りなさい。