【入門】ArduinoIDEでプログラミングの基本を解説します!

プログラミング

ArduinoIDEのプログラムの基本を解説

MatsuAki
MatsuAki

今回はAruduinoIDEでプログラムを作成するにあたり、プログラムの基本的な記述方法や構成などの基本的な理解が必要です。
そこで、ざっくりでありますがそんな基本的な部分を解説しようと思います。

こんな人にお勧め!

・ArduinoIDEを使ってこれからプログラミングを始めようと思っている方
・ArduinoIDEのプログラミングの基本をおさらいしたい方

プログラムの基本構成

ArduinoIDEのプログラムの構成は大きく3つに分かれます。
プログラムを実行すると①→②→③の順番に実行され、③の処理は繰り返し処理が行われます。

①宣言
プログラムの処理で使うライブラリや変数または関数などの宣言を行う部分です。
プログラムの処理概要のコメントや作成日時を記載する場合はこちらに記載します。


②初めに実行される関数
「setup()」関数はArduinoを起動した後に1回だけ実行される関数です。
ここでは変数の初期設定や利用するライブラリの設定など処理を1度だけ行えば良い内容のプログラムを記載します。

void setup(){

}

③繰り返し実行される関数
「loop()」関数は「setup()」の後に呼ばれる関数で処理は繰り返し行われます。

void loop(){

}

例えば以下のようなプログラムを記述した場合は

void loop(){

・LEDを点灯させる
・LEDを消灯させる
}

LEDが点灯して、LEDが消灯する。先頭に戻って、LED点灯、消灯…この処理を繰り返すことになるので、LEDが点滅する状態となります。

以上のようにArduinoIDEで作成するプログラムは①の宣言、②の初めに実行される関数、③の繰り返し実行される関数の大きく3つに分かれます。
次にプログラムの例を簡単に記載してみます。

/*
   サンプルプログラム
   2020.06.01作成
*/

// LED用のpinの番号を定義する
int led_pin = 12;


void setup(){
    // LED用のPIN出力モードに設定
    pinMode(led_pin, OUTPUT);
}

void loop(){
    // LED点灯
    digitalWrite(led_pin, HIGH);
}

※コメントは1行の場合は「//」で記載し、複数行の場合は「/* */」で記載します。

・各処理の文末には必ず「;」セミコロンを付けます。このセミコロンは処理1つを表します。セミコロンが無い場合でArduinoIDEの検証ボタンを押した場合はエラーになります。

・各処理のカッコは必ず対になります。対になっていない場合はエラーになります。
void loop(){
digitalWrite(led_pin, HIGH);
}

変数について

AruduinoIDEでは「変数」を使うことで、センサーの状態(値)や計算結果などの値をプログラム内で保存できます。変数は保存や読込、変数同士で計算ができます。
例えば数値の変数「val」という名前(名前は任意でアルファベット、数字、アンダーバーを使用可能)使う場合は①宣言部に以下ようなプログラムを記載します。

変数の定義は「データ型 変数名;」で記述します。

int val;

カンマで区切ることで複数の変数を一度に定義できます。

int result1, result2, result3;

あらかじめ定義時に値を代入しておくこともできます。

int value = 1000;

以下は変数の定義から変数の実際の使い方のサンプルプログラムです。
国語、算数、英語の点数の合計を計算してシリアルモニタへ表示するプログラムです。

// 3科目の合計点数を保管する変数を定義します。
int goukei = 0;

void setup(){

}

void loop(){
   
   // 国語、算数、英語用の得点を保管する変数を定義します。
   int kokugo, sansuu, eigo;

   // 3科目の点数を代入します。
   kokugo = 45;
   sansuu = 50;
   eigo = 100;

   // 3科目の点数の合計を計算します。
   goukei = kokugo + sansuu + eigo;

   // 3科目の点数の合計を表示ます。
   Serial.print("Goukei :");
   Serial.pring(goukei);
}

変数のデータの型についての補足です。変数名の前に記述するデータ型ですが、以下のように記述する内容によって変数に保管できる内容が異なります。

データ型利用できる範囲
boolean0,1
char-128~127
int-32,768~32,767
long-2,147,483,648~2,147,483,647
float3.4028235×10*38乗~-3.4028235×10*38乗

繰り返し処理

ArduinoIDEではloop()関数の中に記述した処理を繰り返しますが、その中で「while」文を利用することで、loop()関数内で別の繰り返し処理をすることができます。

while (条件式) {

   処理内容①
   処理内容②

}

上記処理では条件式が成立している間、処理内容①→②→①→②→①→②…と処理を繰り返し続け、条件式が成立しなくなるまで処理します。
例えば以下のプログラムの例はシリアルモニタに0,1,2,3,4,5,…99を表示するプログラムです。

void setup(){
    Serial.begin(9600);
}

void loop(){

   int count = 0;

   // countの変数が0から100未満(0~99)まで繰り返す
   while (count < 100) {

      count = count + 1;
      Serial.println(count);

   }
}

while以外にも「for」文や「do while」があります。
以下簡単な例です。

for (初期化; 条件式; 変数の変更){
   処理内容
   …
}
// countの変数が0から100未満(0~99)まで繰り返す
// "count++" ←は"count = count + 1"と同じ意味です。
for (count = 0; count < 100; count++){
   Serial.println(count);
}
do {
   処理内容
} while(条件式):
count = 0;
// countの変数が0から100未満(0~99)まで繰り返す
do {
   Serial.println(count);
   count = count + 1;
} while(count <= 100);

分岐処理

プログラム処理で「条件分岐」による分岐処理は重要です。「条件分岐」とはある条件によって実行する処理を分けることができます。例えば条件によってLEDを点灯させたり、消灯させたりと切り替えができます。

if (条件式) {

   条件式が成立する場合に実行される処理
}else {

   条件式が成立しない場合に実行される処理
}

次に条件分岐を使った簡単な例です。数字が6の場合はシリアルコンソールに「No.6」を表示し、それ以外の場合は「Not No.6」を表示する。(ちょっと表現が…汗)

void loop(){

   int value;
   value = 5;

   if (value == 6){

      Serial.println("No.6");
   }else{

      Serial.println("Not No.6");
   }

}

条件分岐を行うには、分岐を行う判断材料が必要です。上記の「(value == 6)」は条件式といいますが、「==」の部分を比較演算子といいます。比較演算子は他にも以下の表に記載されている比較演算子が利用できます。

比較演算子説明
A == BAとBが等しい場合
A != BAとBが等しくない場合
A < BAがBよりも小さい場合
A <= BAがB以下の場合
A >BAがBよりも大きい場合
A >= BAがB以上の場合

また条件式を複数併せて判断することも可能です。以下は複数の条件式を同時に判断利用できる演算子です。

演算子説明
A && BAとBの条件式がどちらも成立している場合
A || BAまたはBどちらかの条件式が成立た場合
! AAの条件式の逆。※つまり条件式が成立しない場合に成立したことになる

こちらはvalueが0以上で9よりも小さい時かを判定する条件式になります。

if ( value >= 0 && value < 9){
…
MatsuAki
MatsuAki

ここまででArduinoIDEのプログラムを作成するにあたり基本的な記述方法や構文を解説しました。
実際には見ただけでは覚えきれないので最初は書籍や参考サイトなどプログラムを真似をしながら記述してみると徐々にプログラムに慣れ理解が深まると思います。