はじめに
Arduino IDEでプログラムを書くとなるとArduino言語を使うことになります。
Arduino言語は、C/C++のような言語なので、C/C++を使ったことがあれば作りやすいと思います。
ここでは、Arduino言語の構造についてまとめます。
構造
スケッチ
setup()
スケッチ開始時に呼び出されます。
ボードの電源投入またはリセット時に一度だけ実行される処理を記述します。
loop()
setup()の処理実行後に呼び出されます。
loop()の中に記述した処理内容は、連続的に繰り返し実行されます。
制御構造
break
処理を強制的に終了するときに使用します。
繰り返し処理や条件文での強制終了に使われます。
continue
繰り返し処理を終了条件をチェックし、後続の反復処理を実行します。
この時、continue以降の処理は実行されず、次の反復処理に実行が移行します。
while
指定条件の評価が真の間、{ }で囲われた処理を繰り返し実行します。
conditionには、true/falseで評価されるブール式が入ります。
do while
繰り返し処理を行います。
繰り返し条件の評価は、ループの最後に実行されるので、繰り返し処理は、必ず1回以上実行されます。
conditionには、true/falseで評価されるブール式が入ります。
if
指定する条件によって処理を分岐させるときに使用します。
conditionには、true/falseで評価されるブール式が入ります。
評価がtrueの場合、{ }で囲われた処理が実行されます。
評価がfalseの場合、{ }で囲われた処理を実行せず、後続の処理に実行を移します。
else if
ifとともに使用される条件処理です。
if節での条件condition1の評価が偽の場合、condition2の評価が実行されます。
評価による処理の分岐に関しては、ifと同じになります。
else if節は、複数記述することができ、評価は記述した順番に実行されます。
ですので、優先順位の高い処理は、上に記述することになります。
else
ifと共に使用される条件処理です。
if節、if else節での条件(condtion1,condition2)の評価がどちらも偽の場合にelseの処理が実行されます。
else節には条件がないので、if節、else if節の条件が偽の場合、必ず処理されるとなります。
for
for文の{ }で囲われた処理を繰り返し実行します。
initは、繰り返し処理開始時に1回だけ実行されます。変数の初期化を記述します。
conditionは、for処理内を実行するたびに評価される条件です。繰り返し処理の終了条件を記述します。
この条件の評価がfalseとなると繰り返し処理は終了します。
incは、for処理内を実行されるたびに実行されます。
主に終了条件に使用するカウンタ変数の演算に使用します。
goto
gotoの記述箇所で定義したlabelに処理を移します。
goto文を多用すると処理がどう流れているか掴みづらくなるので必要最低限に抑えたほうが良いと思います。
return
{ }で囲われた処理を終了するときに使用します。
処理終了時に値を戻す場合は、valueで返します。返す値がない場合は、valueは省略します。
switch case
switchで指定する変数varの値と一致するlabel値のcase処理を実行します。
基本的にcase処理の最後にはbreakを記述し、switch case処理を抜けるように作ります。
また、どのlabel値にも一致しない場合は、default節が実行されます。
シンタックス
define
プログラムコンパイル前に定数値(value)に名前(constantName)を付けることができます。
定義された定数は、チップ上のプログラムメモリ空間を占有しません。
コンパイラは、これらの定数への参照をコンパイル時に定義された値に置き換えます。
分かりやすい名前を付けておくことでプログラムを見やすくできます。
また、プログラムの複数の個所で同じ定数値を使う場合、defineで定義しておくことによって、その値を変更する際に、変更が一か所でできるため、簡単に修正でき、修正漏れも防げます。
include
外部ライブラリを含めるときに使用します。(構文の上側)
これにより標準CライブラリやArduino用に作成されたライブラリにアクセスできます。
自分で作成したヘッダファイルでプログラムと同じフォルダに保存してある場合は、ファイル名をダブルクォーテーションで囲った形式で記述します。(構文の下側)
/* */ //
プログラムにコメントを付けるときに使用します。
/**/は、/* から */までの間がコメント文として扱われます。
//は、//以降に記述される文がコメントとして扱われます。
;
ステートメントを終了するために使用します。
ひとつの処理の終わりに付ける形になります。
{ }
開始の{ から終了の }までをひとまとまりの処理として定義します。
関数や、繰り返し文、switch-case文を記述するときに使用する形になります。
演算子
算術演算子
数値演算を行うときに使用する演算子です。
算術演算子 | 処理 | 例 | 説明 |
% | 剰余 | 5 % 2 | 余りを計算する 例の場合、1 |
* | 乗算 | 5 * 2 | 掛け算を計算する 例の場合、10 |
+ | 加算 | 5 + 2 | 足し算を計算する 例の場合、7 |
– | 減算 | 5 – 2 | 引き算を計算する 例の場合、3 |
/ | 除算 | 5 / 2 | 割り算を計算する 例の場合、2 |
= | 割当演算子 | A = B | 値を代入する 例の場合、AにBを代入 |
比較演算子
条件文の評価で比較するときに使用する演算子です。
比較演算子 | 処理 | 例 | 説明 |
!= | 等しくない | A != B | AはBと等しくない |
< | より小さい | A < B | AはBより小さい |
<= | 以下 | A <= B | AはB以下 |
== | 等しい | A == B | AはBと等しい |
> | より大きい | A > B | AはBより大きい |
>= | 以上 | A >= B | AはB以上 |
ブール演算子
論理演算をするときに使用する演算子です。
ブール演算子 | 処理 | 例 | 説明 |
! | 論理否定 | !A | Aではない |
&& | 論理積 | A && B | A かつ B |
|| | 論理和 | A || B | A または B |
ポインタ演算子
アドレスを直接参照する場合に使用する演算子です。
ポインタ演算子 | 処理 | 例 | 説明 |
& | 参照演算子 | &A | Aのアドレスを参照する |
* | 逆参照演算子 | *A | Aのアドレスに格納されている値を参照する |
ビット演算子
ビットごとに処理するときに使用する演算子です。
ビット演算子 | 処理 | 例 | 説明 |
& | AND | (10101010) & (00000011) [()内:2進表記] | ビットごとに論理積をとる 例の場合、(00000010) |
<< | 左ビットシフト | (00001100) << 2 [ ()内: 2進表記] | 左方向に指定数ビットをシフト 例の場合、(00110000) |
>> | 右ビットシフト | (00001100) >> 2 [ ()内: 2進表記] | 右方向に指定数ビットをシフト 例の場合、(00000011) |
^ | XOR | (10101010) ^ (00000011) [()内:2進表記] | ビットごとに排他的論理和をとる 例の場合、(10101001) |
| | OR | (10101010) | (00000011) [()内:2進表記] | ビットごとに論理和をとる 例の場合、(10101011) |
~ | NOT | ~ (10101010) [()内:2進表記] | 各ビットを反転する 例の場合、(01010101) |
混合演算子
複数の演算を複合して一つの演算子としてまとめたものです。
混合演算子 | 処理 | 例 | 説明 |
%= | 複合剰余 | A %= B | A = A % B |
&= | 複合AND | A &= B | A = A & B |
*= | 複合乗算 | A *= B | A = A* B |
++ | インクリメント | A++ | A = A + 1 |
+= | 複合加算 | A += B | A = A + B |
— | デクリメント | A– | A = A – 1 |
-= | 複合減算 | A -= B | A = A – B |
/= | 複合除算 | A /= B | A = A / B |
^= | 複合XOR | A ^= B | A = A ^ B |
|= | 複合OR | A |= B | A = A | B |
まとめ
ここまで、Arduino言語の構造についてみてきました。
文法としては、ほぼC言語かと思います。
組み込みプログラム特有のスタートアップルーチンとメインルーチンは、setup()とloop()という関数で定義されているのでとてもシンプルです。
このページは、Arduinoリファレンスをもとに作成しましたので、詳細についてはそちらを参照してみてください。
コメント