今回は、mBotプログラミングシリーズ(Arduino編)の第3回です。
この回では、mBotのLEDライトを光らせるプログラミングを学びます。
mBotにはLEDライトが搭載されており、プログラムで点灯や点滅を制御することができます。
Arduino IDEを使ってmBotのLEDを制御し、さまざまな光り方を試してみましょう。
全講座の一覧はこちら
目標
- 光の三原色を理解する
 - LEDライトを制御する方法を理解する
 - 色や点滅のパターンをプログラムで設定する
 
Arduinoプログラムファイルの作成
ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

mBotのLED制御の基本
LEDライトを光らせるAPI
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
mBotのArduinoライブラリを使用すると、mBotのモーター、LED、ブザー、センサーなどの各機能を簡単に利用できます。
mBotのLEDは MeRGBLed クラスを使って制御します。
基本的な点灯・消灯や色の変更には、以下の関数を使用します。
MeRGBLed rgb(7,2);           // LED制御用のインスタンス(オブジェクト)を作成する
rgb.setColor(0, 255, 0, 0);  // 指定したLEDの色を変更する
rgb.show();                  // 設定した色を反映するAPIを利用した簡単なプログラム
APIを用いて、次のような簡単なプログラムが作成できます。
LEDライトの場所と色を指定してLEDライトを点灯させます。
#include <MeMCore.h>
MeRGBLed rgb(7,2);           // LEDオブジェクトを作成
void setup() {
  rgb.setColor(0, 255, 0, 0); // LEDを赤色に設定
  rgb.show();                 // 設定を反映
}
void loop() {
  // ループ処理は不要
}クラスとインスタンス(オブジェクト)について
このコードを理解するためには、「クラス」と「インスタンス(オブジェクト)」の概念を知ることが重要です。
クラスとインスタンス(オブジェクト)については、こちらで説明しています。
MeRGBLedとは?
MeRGBLedは、mBotのLEDライトを制御するためのクラスです。
このクラスは、Makeblockのライブラリ(MeRGBLed.h)に含まれており、mBotのLEDライトを簡単に操作することができます。
class MeRGBLed : public MePort
{
public:
  MeRGBLed(void);
  MeRGBLed(uint8_t port);
  MeRGBLed(uint8_t port, uint8_t led_num);
  MeRGBLed(uint8_t port, uint8_t slot, uint8_t led_num);
  ~MeRGBLed(void);
  void reset(uint8_t port);
  void reset(uint8_t port,uint8_t slot);
  void setpin(uint8_t port);
  uint8_t getNumber(void);
  cRGB getColorAt(uint8_t index);
  void fillPixelsBak(uint8_t red, uint8_t green, uint8_t blue);
  bool setColorAt(uint8_t index, uint8_t red, uint8_t green, uint8_t blue);
  bool setColor(uint8_t index, uint8_t red, uint8_t green, uint8_t blue);
  bool setColor(uint8_t red, uint8_t green, uint8_t blue);
  bool setColor(uint8_t index, long value);
  void setNumber(uint8_t num_led);
  void show(void);
private:
  uint16_t count_led;
  uint8_t *pixels;
  uint8_t *pixels_bak;
  void rgbled_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask, uint8_t *port);
  const volatile uint8_t *ws2812_port;
  volatile uint8_t *ws2812_port_reg;
  uint8_t pinMask;
};rgb(7,2)とは?
MeRGBLed rgb(7,2);このコードは、mBotのLEDライトを制御するためのインスタンス(オブジェクト)を作成しています。
MeRGBLedはクラス(設計図)rgb(7,2)はそのクラスから作られたインスタンス(オブジェクト)- 7:LEDが接続されているポートを指定します。
 - 2:制御するLEDの個数を指定します。左右に2つのRGB LEDが搭載されています。
 
MeRGBLed rgb(7,2);           // LEDライトを制御するインスタンス(オブジェクト)を作成
rgb.setColor(0, 255, 0, 0);  // 全てのLEDの色を赤に変更する
rgb.show();                  // 設定した色を反映するこのコードを書くことで、
①mBotのLEDライトを制御できるオブジェクトが生成され、
②setColor() メソッドを使ってLEDの場所と色を指定、
③show() メソッドを使って設定を反映することができます。
 メソッドの各引数の意味は次の通りです。setColor()
・第1引数 0:全てのLED、1:右側LED、2:左側LED
・第2引数:赤(R) 色の強さ(0~255)
・第3引数:緑(G) 色の強さ(0~255)
・第4引数:青(B) 色の強さ(0~255)
RGBカラーコードとは?
RGBは光の三原色で、赤(Red)、緑(Green)、青(Blue)の3つの値を組み合わせて色を作ります。
各値は0から255の範囲で指定します。

mBotの基本的なLED制御プログラム
以下のコードは、『LEDの色を時間とともに変化させる』プログラムです。
#include <MeMCore.h>
MeRGBLed rgb(7,2);
void setup() {
}
void loop() {
  rgb.setColor(0, 255, 0, 0); // 赤色
  rgb.show();
  delay(1000);
  
  rgb.setColor(0, 0, 255, 0); // 緑色
  rgb.show();
  delay(1000);
  
  rgb.setColor(0, 0, 0, 255); // 青色
  rgb.show();
  delay(1000);
}まとめ
今回は、mBotのLED制御する方法を学びました。MeRGBLed クラスを使って色を設定し、show() 関数で反映させることで、さまざまな光の演出が可能になります。
LEDの制御を応用すれば、状況に応じて点滅させたり、センサーと連携させて特定の条件で光らせたりすることができます。
次回は、mBotをプログラムする上で欠かせない変数について学びます。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

  
  
  
  


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