====== 3-2 Arduinoのお作法 ======
世の中にはいろいろなプログラミング言語があり、それぞれに独自のルールを持っています。
先程のLチカのサンプルコードを使いながら、Arduino言語のお作法について解説します。
===== Arduino言語の構造 =====
{{:gimmickkouza:electronic_basic:3:3-2.png?600|}}
Arduino言語は、動作の役割が異なる3つの部分で構成されています。
== ①宣言部 ==
②setup部よりも上の部分が宣言部です。
ライブラリを使うときに、ここで使いたいライブラリの名前を宣言しておくことで、プログラムの中で使えるようにしたり、プログラム全体で使う変数や関数を宣言する場所です。
(ちなみにプログラム全体で使う変数をグローバル変数、関数をグローバル関数と呼びます)
他にも、プログラムの内容などを説明するコメントをここに残しておく人もいます。
今回のLチカでは、特に書くことがないので空白になっています。
/*プログラム全体で使う変数をグローバル変数とかグローバル関数と呼ぶので、一言入れとくといいかもです*/
== ②setup部 ==
void setup(){ }の、{ }(波かっこ)の部分の中がsetup部です。
Arduinoに電源が入り起動した時に、①宣言部を実行した次に1回だけ実行される部分です。
Arduinoのソケットの初期設定や、Arduinoに繋いだ電子部品の初期設定に関する内容を書いておく部分です。
== ③loop部 ==
void loop(){ }の、{ }(波かっこ)の部分の中がloop部です。
Arduinoは②setup部を実行した後、この③loop部を繰り返し実行し続けます。
プログラムのメインの部分です。電子部品からデータを読み取ったり、それをもとに計算をしたり、条件を付けて電子部品を動かしたりするためのプログラムをびっちり書きます。
=== プログラムの動作順序 ===
Arudinoのプログラムは、基本的に一番上から順番に1行ずつ実行されます。
プログラムが書き込まれたArduinoに電源を入れると、
* ①まず宣言部のコードが1回だけ実行されます。
* ②それが終わると次にsetup部のコードが1回だけ実行されます。
* ③最後にloop部のコードが実行され、それが終わるとloop部の先頭に戻り、以降は電源が切れるまでloop部を無限に繰り返し続けます。
つまり、 **①→②→③③③③③③③③③③③③③③③(以下無限ループ)** という動作をします。
===== Arduinoの言語の書き方のお約束 =====
Arduino言語でプログラムを書く上で、いくつかの決まり事があります。
この決まり事を守れていないとプログラムは動作できず、「検証」をかけたときにエラーが出ます。
==== 文末には必ず「;」(セミコロン)をつける ====
命令文を1文書いたら、その後ろには必ず「;」(セミコロン)を付けます。
例(Lチカの5行目):
pinMode(13, OUTPUT);
Arduino言語での「;」は、"次の命令文との区切り"であることを意味します。
日本語の「。」と似たようなものですが、人間用ではなくArduinoがプログラムを理解する為に必要な文字です。
つまり「;」を付けることによって、「この文はここで終わり。次の文字からは別の文」であることを、Arduinoにわからせます。
「;」を付け忘れると、Arduinoはどこからどこまでが一つの命令文なのかを判別できなくなり、エラーを吐いてしまいます。
==== 括弧は必ず対になる ====
Arduinoでは命令を書くため、或いはある命令の中に別の命令を書くためなど、様々な場面で括弧を使います。
それらの括弧は、必ず同じ種類の閉じ括弧と対になっている必要があります。
例(Lチカの4~6行目):
{{:gimmickkouza:electronic_basic:3:3-3.png?400|}}
まずsetupの後ろの黄色の()は対になった括弧です。
そしてvoid setup()の後ろの{ }も対になった波括弧です。
この{ }の中には、pinModeという文があり、その文中には水色の対になった()があります。
※「;」を打たないルールの命令文も少数ですがあります。それは個別で覚えてください
==== 2バイト文字(日本語や全角の英数字)は使えない ====
コンピュータの世界の文字には「1バイト文字」と「2バイト文字」があります。
詳細は割愛しますが、2バイト文字の代表例は日本語、韓国語、中国語です。
我々日本人が日常的に使う日本語の文字(漢字/ひらがな/カタカナ)と、全角のアルファベットや数字・記号・スペースを使って、Arduinoのプログラムを書くことはできません。
例1:下記の文はすべて1バイト文字で書かれているのでOKです
pinMode(13, OUTPUT);
例2:下記の文は2バイト文字(全角英数記号)を使っているのでエラーが出ます
pinMode(13, OUTPUT);
※唯一の例外として、後述するコメント部分だけは日本語(を含む2バイト文字)を使うことができます
==== プログラムにはインデントを入れよう ====
必須ではない(やらなくてもエラーは出ない)ですが、プログラムにはインデントを入れましょう。
後から見返した時に、どの命令がどう入れ子構造になっているのか視認でき、格段に読みやすいです。
インデントは半角スペースを入力するか、「Tab」キーを押すことで入れられます。
裏技1:ツールバーの「ツール」→「自動整形」を押すと、スケッチ全体に自動でインデントが入ります
裏技2:「Ctrl」キーを押しながら「T」を押しても、裏技1と同じ効果を得られます
参考:インデントのあるコードとないコードの視認性の比較
(どちらも同じコードですが、左はインデントあり/右はインデントなし)
{{:gimmickkouza:electronic_basic:3:3-4.png?800|}}
/*Auto FormatがToolsタブ以下にあるのでこちらからもインデントを入れられることも書いといたほうがいいかも */
----
インデントを自動で入れてくれる「Ctrl」+「T」のように、ショートカットキーを使うと作業が非常にはかどります。
オススメのショートカットキーをいくつかご紹介します。
* 【元に戻す:操作を一つ戻します】「Ctrl」+「Z」
* 【やり直し:戻した操作をやり直します】「Ctrl」+「Shift」+「Z」
* 【上書き保存:スケッチを上書き保存します】「Ctrl」+「S」
* 【検索:プログラム本文から任意の単語を検索します】「Ctrl」+「F」
* 【置換:プログラム本文の任意の単語を別の単語に置き換えます】「Ctrl」+「H」
===== プログラムにコメントを書く =====
Arduinoのプログラム本文に文字を打ち込むと、その文字はプログラムの一部として認識されます。
しかし特定の記号を打ち込むことで、プログラムの動作には影響を及ぼさない「コメント」を書きこむことができます。
==== コメントはどう役に立つか ====
* 後からこのプログラムを見返した人(主に未来の自分ですが、そのプログラムを配布する場合は知らないどこかの誰か)の為に、プログラムの説明や注意を書いておく
* プログラムを配布するときに、配布したプログラムの作者名や使用ルールなどを書いておく
* プログラムを見やすくするための装飾などを入れる
* プログラムの動作確認をするために、プログラムの特定の行や部分を一時的に「コメント」にしてしまうことで、プログラム本体から切り離して無効化する(この手法をコメントアウトといいます)
==== コメントの書き方 ====
コメントの書き方は下記の2通りです。
なおコメントになっている部分の文字は、ArduinoIDE上では薄灰色で表示されます。
== 「//」(スラッシュを2個、つまりダブルスラッシュ)をつける ==
その行のダブルスラッシュ以降の文字がコメントになります。
例:「13番のピンを出力モードにする」という言葉がコメントとして入っています
{{:gimmickkouza:electronic_basic:3:3-5.png?400|}}
== 「/*」(スラッシュとアスタリスク)と「*/」(アスタリスクとスラッシュ)で囲む ==
複数行一気にまとめてコメントアウトすることができます。
例:3行目から7行目までがコメントアウトされています
{{:gimmickkouza:electronic_basic:3:3-6.png?400|}}