青いやつの進捗日記。

メモとしてべんきょうのしんちょくをかいていきます。あとで自分が検索しやすいもん

Makeblock mBot Ultimate 2.0(Arduino)をArduino.appでコード改変してモーターを自在に動かしてみよう

tech.motoki-watanabe.net

の続き。

次は自分でコード改変して動かしてコードの理解をしていこうかなと。

今回もサンプルを参考にしていきたいと思います。


今回も参考にするのは
ExampleのMe_MegaPiDCMotor/MeMegaPiDCMotorTest.ino
です。

こちらのコードを見てみると、

#include "MeMegaPi.h"

MeMegaPiDCMotor motor1(PORT1A);
MeMegaPiDCMotor motor2(PORT1B);
MeMegaPiDCMotor motor3(PORT2A);
MeMegaPiDCMotor motor4(PORT2B);

uint8_t motorSpeed = 100;

void setup()
{
}

void loop()
{
  motor1.run(motorSpeed); /* value: between -255 and 255. */
  motor2.run(motorSpeed); /* value: between -255 and 255. */
  motor3.run(motorSpeed);
  motor4.run(motorSpeed);
  delay(2000);
  motor1.stop();
  motor2.stop();
  motor3.stop();
  motor4.stop();
  delay(100);
  motor1.run(-motorSpeed);
  motor2.run(-motorSpeed);
  motor3.run(-motorSpeed);
  motor4.run(-motorSpeed);
  delay(2000);
  motor1.stop();
  motor2.stop();
  motor3.stop();
  motor4.stop();
  delay(2000);
}

と、なっています。

とりあえずこれをそのまま書き込んで動かしてみましょう。

ちなみに私は現時点では、Makeblock mBot Ultimate 2.0でとりあえずRobotic Arm Tankを組み立てて動かしています。

この場合、ポート1、ポート2にタイヤ部分に当たるモーター、
ポート3にアーム部分の角度、
ポート4にアームの開閉、
という感じでつながっていると思います。

で、その場合このコードだと下のタイヤ部分のモーター2つが前に回って止まって、後ろに回って止まって、を繰り返します。

コードを見た感じ、
PORT1A、PORT1B、PORT2A、PORT2Bをそれぞれmotor1~4と命名してるので、
それがモーターに対応しているはずです。

で、色々試してみたのですが、

PORT1B → ポート1
PORT2B → ポート2
PORT3B → ポート3
PORT4B → ポート4

って感じみたいですね。

で、このコードではMeMegaPi.hをIncludeしていますね。 今回のコードはMegaPiDCMotorの機能を使っているので、
このヘッダーファイルの中でも75行目の

#include "MeMegaPiDCMotor.h"

で、MeMegaPiDCMotor.hをIncludeしています。
MeMegaPiDCMotor.hを見てみると、

MeMegaPiDCMotor(uint8_t port);
//とか
void run(int16_t speed);
//とか
void stop(void);

こんなんが書いてあります。
これにより、MeMegaPiDCMotorTest.inoの中で

MeMegaPiDCMotor motor1(PORT1A);
motor1.stop();

という書き方をできるようになっています。

で、つまりですね、Robotic Arm Tankで全部のモーターを動かすコードを書くとすると、こうなります。

#include "MeMegaPi.h"

MeMegaPiDCMotor motor1(PORT1B);
MeMegaPiDCMotor motor2(PORT2B);
MeMegaPiDCMotor motor3(PORT3B);
MeMegaPiDCMotor motor4(PORT4B);

uint8_t motorSpeed = 50;

void setup()
{
}

void loop()
{
  motor1.run(motorSpeed); /* value: between -255 and 255. */
  motor2.run(motorSpeed); /* value: between -255 and 255. */
  motor3.run(motorSpeed);
  motor4.run(motorSpeed);
  delay(2000);
  motor1.stop();
  motor2.stop();
  motor3.stop();
  motor4.stop();
  delay(2000);
  motor1.run(-motorSpeed);
  motor2.run(-motorSpeed);
  motor3.run(-motorSpeed);
  motor4.run(-motorSpeed);
  delay(2000);
  motor1.stop();
  motor2.stop();
  motor3.stop();
  motor4.stop();
  delay(2000);
}

いや、まあ偉そうにこんなブログ書いておいてほぼ変えてないんですけどね。

これをArduinoに書き込めば、Makeblockを何にも繋がないでも自動で
それぞれのモーターを前に回す、停止、後ろに回す、停止を繰り返します。
タイヤなら回るし、アームなら開閉します。