PR

【mBotプログラミング例⑫】配列を使おう(Arduino編)|C言語

Arduino(C/C++)
この記事は約6分で読めます。

今回は、mBotプログラミングシリーズ(Arduino編)の第12回です。

この回では、Arduino IDEを使って配列を作成し、mBotのプログラムで活用する方法を学びます。
配列を使うことで、複数のデータを効率的に管理し、プログラムをより分かりやすく整理することができます。

目標

  • 配列とは何かを理解する。
  • 配列を作成し、使う方法を学ぶ。
  • mBotのプログラムで配列を活用する。

Arduinoプログラムファイルの作成

ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

事前にmBotのArduinoライブラリを導入しておいてください。
ライブラリの導入に関しては、次の記事を参考にしてください。

配列とは何か?

配列は、同じデータ型の複数の要素を格納するためのデータ構造です。

配列を使うことで、複数のデータを一括して管理し、プログラムの構造を明確にすることができます。

例えば、以下のようなデータを配列として扱うことができます:

  • 光センサーのデータ(例:345.5, 687.0, 954.8)
  • 操作手順のリスト(例:「前進」「回転」「停止」の速度設定)
例)光センサーのデータリスト

配列を使うことで、プログラムをより効率的に構築することが可能です。

配列の基本構文

// 配列の宣言と初期化
データ型 配列名[要素数] = {値1, 値2, ..., 値N};

例えば、整数型の配列を宣言し初期化する場合は以下のようになります。

int numbers[5] = {10, 20, 30, 40, 50};

配列の個数の定義とゼロ番目の考え方

配列の要素数(個数)は、配列を宣言する際に定義します。
配列のインデックスは0から始まります。つまり、最初の要素はゼロ番目のインデックスを持ちます。

上記で示したnumbers[5]の配列は、図で表現すると次のようになります。

配列を使うメリット

配列を使うことで得られる主なメリットは次の通りです。

  • データの一括管理: 複数のデータを一つの変数で管理できるため、プログラムが効率的になります。
  • 可読性の向上: 配列を使うことで、プログラムの構造が明確になり、読みやすくなります。
  • 柔軟な操作: ループを使って配列の要素に一括して操作を加えることができ、柔軟なプログラムが作成できます。

配列を使った簡単なプログラム

#include <MeMCore.h>

MeLightSensor lightSensor(PORT_6);   // 光センサーのオブジェクトを作成
int lightValue[24];                  // 光センサー値を格納する配列

void setup() {
  for(int i=0; i < 24; i++){
    lightValue[i] = lightSensor.read();
    delay(1000);
  }
}

void loop() {}

このプログラムでは、光センサーの値を1秒おきに合計24秒分、配列に保存しています。

このプログラムは、1日の気温を記録しておくプログラムに応用することができます。
1時間おきに、合計24時間分の気温をリストに保存して、後から気温推移を確認することが可能です。

mBotの関数を使ったプログラム

mBotのプログラム内で配列を使ってモーターを制御する方法を見てみましょう。
以下は、配列を使ったライントレースのプログラムです。

#include <MeMCore.h>

MeLineFollower line(PORT_2);    // ライントレースセンサーのオブジェクトを作成
MeDCMotor MoterL(M1);
MeDCMotor MoterR(M2);

uint8_t val;                         // ライントレースセンサー読み出し値格納用変数
int speedl[4] ={-150,100,-100,150};  // mBot左タイヤのスピード
int speedr[4] ={150,100,-100,-150};  // mBot右タイヤのスピード

void setup() {}

void loop() {
  val = line.readSensors();     // ライントレースセンサーの値をvalに格納する

  MoterL.run(speedl[val]);      // 左タイヤを動かす
  MoterR.run(speedr[val]);      // 右タイヤを動かす

}

//ライントレースセンサーの値
// 0:両方とも黒      ⇒ 前進
// 1:左が黒、右が白  ⇒ 左回転
// 2:左が白、右が黒 ⇒ 右回転
// 3:両方とも白      ⇒ 後退

Arduino IDEからmBotへ書き込みして、動作を確認してみましょう。

このプログラムでは、左タイヤ用speedl[]右タイヤ用speedr[]の2つの速度定義配列を用意し、ライントレースセンサー値に応じた速度を格納します。

それぞれの関係は次の通りです。

センサー値
val
タイヤ速度
speedl[]
タイヤ速度
speedr[]
mBot動作
0-150150前進
1100100左回転
2-100-100右回転
3150-150後退

これにより、ライントレースのプログラムが非常に簡潔になったことが理解できると思います。

配列を使うことで、データを効率的に管理し、プログラムをより分かりやすく整理することができます。

まとめ

今回は、配列を使ってセンサーデータを保存する基本的なプログラムと、ライントレースプログラムを簡潔にする方法について学びました。
配列を使うことで、複数のデータを効率的に管理し、プログラムをより分かりやすく整理することができます。mBotのプログラムでも配列を使って、より高度な制御を実現することができるでしょう。

今回で、mBotプログラミング例~基本編~は終了となります。
~応用編~にも是非挑戦してみてください!

mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。

mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

タイトルとURLをコピーしました