1.宣言
1.1 宣言のプログラム記入例
1.2 変数に使う型
参考に変数の型を表1に示します。
変数の型 | 格納するデータ |
boolean | TrueまたはFalse |
char | -128~127までの整数 |
unsigned char | 0~255までの整数 |
byte | 0~255までの整数 |
int | -32768~32767までの整数 |
unsigned int | 0~65535までの整数 |
word | 0~65535までの整数 |
long | -2147483648~2147483647までの整数 |
unsigned long | 0~4294967295までの整数 |
float | -3.4028235E+38~3.4028235E+38 |
double | -3.4028235E+38~3.4028235E+38 |
1.3 宣言しないと・・・
エラーが出ます。表1の様な一覧を見て適切な変数の型を宣言しましょう。
2.設定
Arduino UNOは「○○の準備をして」とお願い(命令)しないと働いてくれません。
※出力(OUTPUT)ときたら、入力(INPUT)も設定出来ます。
2.1 初期設定プログラム記入例
//設定
void setup() { //一回だけ実行する
pinMode(LED, OUTPUT); //LEDを接続した13番ピンを出力用に設定する
}
上に書かれた 「void setup(){」 から 「}」 の間はArduino UNOが起動後に1度だけ実行する部分です。この部分は「setup」と書かれている通り、主にArduino UNOに初期設定を行う際に使います。
初期設定は一度行えば良いので、無限ループ処理内に初期設定を書いても動きますが、なるべく「setup」内に書いた方が良いです。
2.2 初期設定が無いと・・・
3. 処理
Arduino IDEは、他の代表的なVisual BasicやC言語等のプログラミング言語(なんでも御座れ系)に比べるとフィジカルコンピューティング(マイコンにより制御されたセンサーや動力源により人と意思疎通する事)に特化したシンプルな言語です。 「特化した」と、「シンプル」は重要で、フィジカルコンピューティングに関しては、初心者が始める際の敷居の低さと、上級者も納得の奥深さを持っています。
3.1 ループ処理プログラムの記入例
//処理
void loop() { //{}内を無限ループで実行する
for(i=0;i<3000;i++){ //iが0から1ずつ増加し{}内を3000回繰り返す
if (i <= 1500){ //もしiが1500以下なら{}内を実行する
digitalWrite(LED, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする
delayMicroseconds(i); //iμs(iマイクロ秒)LEDを点灯した状態で止める
digitalWrite(LED, LOW); //LEDが接続された13番ピンをLOW(0V)にする
delayMicroseconds(1500-i); //(1500-i)μs LEDを消灯した状態で止める
}
else{ //もしiが1500を超えたら以下の{}内を実行する
digitalWrite(LED, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする
delayMicroseconds(3000-i); //(3000-i)μs LEDを点灯した状態で止める
digitalWrite(LED, LOW); //LEDが接続された13番ピンをLOW(0V)にする
delayMicroseconds(i-1500); //(i-1500)μs LEDを消灯した状態で止める
}
}
}
Arduino UNOでこのプログラムを動かすと、LEDが消えている状態から1.5秒掛けて最大まで明るく点灯し、その後1.5秒掛けて消える動作が無限ループで繰り返されます。感じとしてはLEDがホタルの様に優しく光ります。
3.2主要な関数
「for関数」と「if関数」はプログラムの真髄と言える関数です。この2つを覚えておけば大体なんとかなっちゃいます。
3.2.1 for関数
for関数の中身は以下の通りです。試しにこのプログラムを実行すると、LEDが2秒周期で3回点滅し、その後3秒間消灯します。
void setup() { //一回だけ実行する
pinMode(13, OUTPUT); //LEDを接続した13番ピンを出力用に設定する
}
void loop() { //{}内を無限ループで実行する
for(int i=0;i<3;i++){ //iが0から1ずつ増加し{}内を3回繰り返す
digitalWrite(13, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする
delay(1000); //1000ms(1秒)LEDを点灯した状態で止める
digitalWrite(13, LOW); //LEDが接続された13番ピンをLOW(0V)にする
delay(1000); //1秒LEDを消灯した状態で止める
}
delay(3000); //for関数終了後3秒LEDを消灯した状態で止める
}
「for(int i=0;i<3;i++){」~「}」の間をループするのがfor関数です。
細かく説明すると、
「int i=0」は、iの変数の型はint(表1参照)で初めはi=0からスタートせよ。
「i<3」は、この条件式が成り立つ時は{}内を実行せよ。
「i++」は戻って来たらiを+1増加させよ。
と言う意味です。
3.2.2 if関数
if関数の中身は以下の通りです。試しにこのプログラムを実行すると、LEDが2秒周期でランダムに点滅したり、しなかったりします。
void setup() { //一回だけ実行する
pinMode(13, OUTPUT); //LEDを接続した13番ピンを出力用に設定する
}
void loop() { //{}内を無限ループで実行する
int i=random (100); //iに0~100の間で発生させた乱数を代入する。
if (i <= 50){ //もしiが50以下なら{}内を実行する
digitalWrite(13, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする
delay(1000); //1000ms(1秒)LEDを点灯した状態で止める
}
else{ //もしiが50を越えたら以下の{}内を実行する
digitalWrite(13, LOW); //LEDが接続された13番ピンをLOW(0V)にする
delay(1000); //1秒LEDを消灯した状態で止める
}
}
「if (i <= 50){」~「} else{」~ 「}」条件式が成り立てばその後の{}内を実行し、成り立たなければelse後の{}内を実行するのがif関数です。
細かく説明すると、
「i <= 50」は条件式で、iが50以下であれば直後の{}内を実行せよ。
「else」は、iが50以下でなかったらelse直後の{}内を実行せよ。
と言う意味です。
3.3 各種演算子
演算子 | 説明 |
A = B | AにBを代入する |
演算子 | 説明 |
A + B | AとBの足し算 |
A - B | AとBの引き算 |
pow(A , B) | AのB乗 |
A * B | AとBの掛け算 |
A / B | AとBの割り算(変数の型をfloat等にする) |
A / B | AをBで割った整数(変数の型をint等にする) |
A % B | AをBで割った余り(変数の型をfloat等にする) |
演算子 | 説明 |
A == B | AとBは等しい |
A != B | AとBは等しくない |
A < B | AはB未満 |
A > B | AはBを超える |
A <= B | AはB以下 |
A >= B | AはB以上 |
表2~4は良く使う演算子です。はじめは見ながら使って、そのうち見なくとも覚えてしまいますのではじめからがんばって覚える必要は特にないです。
4. 使用したスケッチ
下記プログラムをArduino UNOに書き込めば13番ピンのLEDがホタルの様に優しく光ります。
/* LEDで蛍の光を再現! 2016.03.19作成 NOBのArduino日記! */ const int LED = 13; //LEDを接続するArduinoのピン番号を設定する long i = 0; //LEDのON・OFF時間を決める変数 void setup() { //起動時に一回だけ実行する pinMode(LED, OUTPUT); //LEDを接続した13番ピンを出力用に設定する } void loop() { for (int i = 0; i < 3000; i++) {//iが0から1ずつ増加し{}内を3000回繰り返す if (i <= 1500) { //もしiが1500以下なら{}内を実行する digitalWrite(LED, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする delayMicroseconds(i); //iμs(iマイクロ秒)LEDを点灯した状態で止める digitalWrite(LED, LOW); //LEDが接続された13番ピンをLOW(0V)にする delayMicroseconds(1500 - i);//(1500-i)μs LEDを消灯した状態で止める } else { //もしiが1500を超えたら以下の{}内を実行する digitalWrite(LED, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする delayMicroseconds(3000 - i);//(3000-i)μs LEDを点灯した状態で止める digitalWrite(LED, LOW); //LEDが接続された13番ピンをLOW(0V)にする delayMicroseconds(i - 1500);//(i-1500)μs LEDを消灯した状態で止める } } }
図1:プログラム例
5. まとめ
マイコンの性能もお遊び程度には十分なので楽しく遊べます。
中級者になったらArduino Duo やIC単体をArduino化すると言う選択肢もあります。プログラム言語は同じなので覚えなおす必要も無く、そのままステップアップ出来て良いですね。