Arduino言語構造

Arduino言語

はじめに

Arduino IDEでプログラムを書くとなるとArduino言語を使うことになります。

Arduino言語は、C/C++のような言語なので、C/C++を使ったことがあれば作りやすいと思います。

ここでは、Arduino言語の構造についてまとめます。

構造

スケッチ

setup()

スケッチ開始時に呼び出されます。

ボードの電源投入またはリセット時に一度だけ実行される処理を記述します。

loop()

setup()の処理実行後に呼び出されます。

loop()の中に記述した処理内容は、連続的に繰り返し実行されます。

制御構造

break

処理を強制的に終了するときに使用します。

繰り返し処理や条件文での強制終了に使われます。

continue

繰り返し処理を終了条件をチェックし、後続の反復処理を実行します。

この時、continue以降の処理は実行されず、次の反復処理に実行が移行します。

while

構文

while( condition ){

}

指定条件の評価が真の間、{ }で囲われた処理を繰り返し実行します。

conditionには、true/falseで評価されるブール式が入ります。

do while

構文

do{

}while( condition );

繰り返し処理を行います。

繰り返し条件の評価は、ループの最後に実行されるので、繰り返し処理は、必ず1回以上実行されます。

conditionには、true/falseで評価されるブール式が入ります。

if

構造

if( condition ){

}

指定する条件によって処理を分岐させるときに使用します。

conditionには、true/falseで評価されるブール式が入ります。

評価がtrueの場合、{ }で囲われた処理が実行されます。

評価がfalseの場合、{ }で囲われた処理を実行せず、後続の処理に実行を移します。

else if

構文

if( condition1 ){

}else if( condition2 ){

}

ifとともに使用される条件処理です。

if節での条件condition1の評価が偽の場合、condition2の評価が実行されます。

評価による処理の分岐に関しては、ifと同じになります。

else if節は、複数記述することができ、評価は記述した順番に実行されます。

ですので、優先順位の高い処理は、上に記述することになります。

else

構文

if( condition1 ){

}else if( condition2 ){

else{

}

ifと共に使用される条件処理です。

if節、if else節での条件(condtion1,condition2)の評価がどちらも偽の場合にelseの処理が実行されます。

else節には条件がないので、if節、else if節の条件が偽の場合、必ず処理されるとなります。

for

構文

for( init ; condition ; inc ){

}

for文の{ }で囲われた処理を繰り返し実行します。

initは、繰り返し処理開始時に1回だけ実行されます。変数の初期化を記述します。

conditionは、for処理内を実行するたびに評価される条件です。繰り返し処理の終了条件を記述します。

この条件の評価がfalseとなると繰り返し処理は終了します。

incは、for処理内を実行されるたびに実行されます。

主に終了条件に使用するカウンタ変数の演算に使用します。

goto

構文

label:

goto label;

gotoの記述箇所で定義したlabelに処理を移します。

goto文を多用すると処理がどう流れているか掴みづらくなるので必要最低限に抑えたほうが良いと思います。

return

構文

return value;

{ }で囲われた処理を終了するときに使用します。

処理終了時に値を戻す場合は、valueで返します。返す値がない場合は、valueは省略します。

switch case

構文

switch( var ){

case label1:

break;

case label2:

break;

default:

break;

}

switchで指定する変数varの値と一致するlabel値のcase処理を実行します。

基本的にcase処理の最後にはbreakを記述し、switch case処理を抜けるように作ります。

また、どのlabel値にも一致しない場合は、default節が実行されます。

シンタックス

define

構文

#define constantName value

プログラムコンパイル前に定数値(value)に名前(constantName)を付けることができます。

定義された定数は、チップ上のプログラムメモリ空間を占有しません。

コンパイラは、これらの定数への参照をコンパイル時に定義された値に置き換えます。

分かりやすい名前を付けておくことでプログラムを見やすくできます。

また、プログラムの複数の個所で同じ定数値を使う場合、defineで定義しておくことによって、その値を変更する際に、変更が一か所でできるため、簡単に修正でき、修正漏れも防げます。

include

構文

#include <fileName1.h>

#include “fileName2.h”

外部ライブラリを含めるときに使用します。(構文の上側)

これにより標準CライブラリやArduino用に作成されたライブラリにアクセスできます。

自分で作成したヘッダファイルでプログラムと同じフォルダに保存してある場合は、ファイル名をダブルクォーテーションで囲った形式で記述します。(構文の下側)

/* */  //

プログラムにコメントを付けるときに使用します。

/**/は、/* から */までの間がコメント文として扱われます。

//は、//以降に記述される文がコメントとして扱われます。

;

ステートメントを終了するために使用します。

ひとつの処理の終わりに付ける形になります。

{ }

開始の{ から終了の }までをひとまとまりの処理として定義します。

関数や、繰り返し文、switch-case文を記述するときに使用する形になります。

演算子

算術演算子

数値演算を行うときに使用する演算子です。

算術演算子処理説明
%剰余5 % 2余りを計算する
例の場合、1
*乗算5 * 2掛け算を計算する
例の場合、10
+加算5 + 2足し算を計算する
例の場合、7
減算5 – 2引き算を計算する
例の場合、3
/除算5 / 2割り算を計算する
例の場合、2
=割当演算子A = B値を代入する
例の場合、AにBを代入

比較演算子

条件文の評価で比較するときに使用する演算子です。

比較演算子処理説明
!=等しくないA != BAはBと等しくない
<より小さいA < BAはBより小さい
<=以下A <= BAはB以下
==等しいA == BAはBと等しい
>より大きいA > BAはBより大きい
>=以上A >= BAはB以上

ブール演算子

論理演算をするときに使用する演算子です。

ブール演算子処理説明
!論理否定!AAではない
&&論理積A && BA かつ B
||論理和A || BA または B

ポインタ演算子

アドレスを直接参照する場合に使用する演算子です。

ポインタ演算子処理説明
&参照演算子&AAのアドレスを参照する
*逆参照演算子*AAのアドレスに格納されている値を参照する

ビット演算子

ビットごとに処理するときに使用する演算子です。

ビット演算子処理説明
&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 %= BA = A % B
&=複合ANDA &= BA = A & B
*=複合乗算A *= BA = A* B
++インクリメントA++A = A + 1
+=複合加算A += BA = A + B
デクリメントA–A = A – 1
-=複合減算A -= BA = A – B
/=複合除算A /= BA = A / B
^=複合XORA ^= BA = A ^ B
|=複合ORA |= BA = A | B

まとめ

ここまで、Arduino言語の構造についてみてきました。

文法としては、ほぼC言語かと思います。

組み込みプログラム特有のスタートアップルーチンとメインルーチンは、setup()とloop()という関数で定義されているのでとてもシンプルです。

このページは、Arduinoリファレンスをもとに作成しましたので、詳細についてはそちらを参照してみてください。

https://www.arduino.cc/reference/en/

コメント

タイトルとURLをコピーしました