今回は、mBotプログラミングシリーズ(Arduino編)の第4回です。
この回では、「変数」について学びます。
変数は、プログラム内でデータを一時的に保存し、必要なときにそのデータを活用するために欠かせないものです。
mBotのようなロボットを制御する際、センサーの値を読み取ったり、モーターの速度を調整したりするために変数が大いに役立ちます。
これから、変数の定義と使い方について詳しく学び、実際にmBotでプログラムを作成してみましょう。
全講座の一覧はこちら
目標
- 変数とは何かを理解する
 - 変数の型を理解する
 - 変数を使ってプログラムする
 
Arduinoプログラムファイルの作成
ここでは、プログラムファイルをイチから作成していきます。
Arduino IDEを立ち上げ、ファイル -> 新規スケッチで真っ新なプロジェクトを用意しましょう。

変数の基礎
変数とは
変数は、プログラム内で値を保存するための名前付きのメモリ領域です。
数値や文字列などのデータを保存できます。
変数宣言
変数を使う際は、変数の型と変数名を「宣言」する必要があります。
Arduino(C++)では次のように変数宣言を行います。
int speed = 100;  // 速度を表す変数speedを定義し、値を100に設定
char grade = 'A'; // 評価を表す変数gradeを定義し、値を'A'に設定変数の宣言は通常、ファイルや関数の一番最初で行います。
変数宣言の時に値を代入することにより、変数の初期化を行うこともできます。
上記の例では、int型のspeedという名前の変数に数値の100を、char型のgradeという名前の変数に文字’A’をそれぞれ保存しています。
記述の意味は次の通りです。
| 記述 | 内容 | 意味 | 
|---|---|---|
| int、char | 変数の型 | 詳細は後述 | 
| speed、grade | 変数 | 変数名は任意に記述可能です。 一部制限は後述  | 
| = | 代入 | 右の値を左の変数へ代入します (数学の「=」とは意味が異なります)  | 
| 100、’A’ | 変数へ代入する「数値」や「文字列」 | - | 
変数の型
変数には、保存するデータの種類(型)があり、それに応じて宣言の仕方が異なります。
以下に主な型をいくつか紹介します。
| 型 | 型 | 説明 | 例 | 
|---|---|---|---|
| int | 整数型 | 整数 | 42 | 
| uint8_t | 符号無し8ビット整数型 | 0~255の符号無し整数 | 200 | 
| uint16_t | 符号無し16ビット整数型 | 0~65535の符号無し整数 | 3000 | 
| float | 浮動小数点型 | 小数 | 3.14 | 
| char | 文字型 | 1つの文字 | ’A’ | 
| String | 文字列型 | 文字列 | ’Hello’ | 
「int」は32ビット符号あり整数型で、-2,147,483,648から2,147,483,647までの範囲の数値を扱えます。
「uint8_t」は8ビット符号無し整数型で、0から255までの範囲です。メモリ使用量が少なく、限られた範囲の数値を扱う場合に便利です。
変数名のルール
変数名は、分かりやすく、意味のある名前を付けることが重要ですが、つけ方には制限があります。
- アルファベット(A〜Z,a〜z)、数字(0〜9)、アンダーバー(_)のみ
 - すべて半角(全角は不可)
 - 第1文字目は必ずアルファベットまたはアンダーバー(数字は不可)
 - if、else、intなどの予約語は使用できない
 
| auto | break | case | char | const | 
| continue | default | do | double | else | 
| enum | extern | float | for | goto | 
| if | inline | int | long | register | 
| restrict | return | short | signed | sizeof | 
| static | struct | switch | typedef | union | 
| unsigned | void | volatile | while | _Alignas | 
| _Alignof | _Atomic | _Bool | _Complex | _Generic | 
| _Imaginary | _Noreturn | _Static_assert | _Thread_local | 
変数を作ってみよう
実際に変数を使ったプログラムを書いてみましょう。
ここでは、mBotのモーターの速度を変数で制御するプログラムを作成します。
#include <MeMCore.h>
MeDCMotor motorL(M1); // 左モーターを初期化
MeDCMotor motorR(M2); // 右モーターを初期化
void setup() {}
void loop() {
  int speed = 100;    // 変数speedを定義し、速度を100に設定
  motorL.run(-speed); // 左モーターを設定した速度で動かす
  motorR.run(speed);  // 右モーターを設定した速度で動かす
  delay(2000);        // 2秒間待つ
  speed = -100;       // 速度を-100に変更
  motorL.run(-speed); // 左モーターを設定した速度で動かす
  motorR.run(speed);  // 左モーターを設定した速度で動かす
  delay(2000);        // 2秒間待つ
}最初にint型のspeedという変数に100を代入しています。
変数speedをrun関数の引数に設定することで、mBotを速度100で前進させます。
次に、変数speedに-100を代入して、同様にrun関数の引数に設定します。
その結果は、mBotを速度100で後退させることになります。
まとめ
今回は、プログラミングの基本である変数の定義と使い方について学びました。
変数は、プログラム内でデータを一時的に保存し、必要な時にそのデータを使って計算や処理を行うために重要です。
次回は、条件分岐と繰り返し処理、演算について学びます。
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

  
  
  
  


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