はじめに
今回から本格的にプログラミングを行っていきましょう。
IDEの基本的な使い方
ArduinoIDEはそのまま起動するとこのような画面が出てきます。なんだかSetupとかLoopとか書いていますが、これらがArduinoを使う上で必要になってくる基本的なプログラムの原型になってきます。
では、それぞれについて説明をしていきましょう。
Setup
Setupのプログラムは以下の部分です。
void setup() {
// put your setup code here, to run once:
}
ここで書くのは初期設定にあたるプログラムです。なので、例えばピンの属性の説明であったり、書き込むファイルの名前を決めたりといった動かすのは最初の一回限りでいいものをここで書きます。
Loop
Loopのプログラムは以下の部分です。
void loop() {
// put your main code here, to run repeatedly:
}
ここで書くのはずっと行ってほしいプログラムです。なので、例えばセンサーで得た情報の読み取りや、書き込みといったこのプログラムの根幹になる部分を書く場所です。
基本的な動作
Arduinoの動き方は決まっており、
setup
↓
loop
↓
loop
↓
loop
↓
︙
といった感じで永遠と繰り返されます。恐らく使っていくうちにここらへんには慣れてくるんじゃないかなと思います。
##Lチカをしてみよう
ということで、早速ですがLEDをチカチカさせる、通称「Lチカ」をやってみましょう!
必要なモノ
- Arduino(1枚)
- ブレッドボード(1枚)
- LED(1個)
- 抵抗(330Ωぐらい)
- ジャンパー線(2本)
動作の概形
LEDをチカチカさせるということは、LEDを…
答えはここから
点けたり消したりを繰り返すことになります。ということはloopで点ける、消すという動作をプログラムしてやればいいということになります。では、そのためのプログラムを作っていきましょう。
プログラムしてみよう
それでは実際にプログラムを書いていきます。
と、その前にプログラムをより見やすいようにするための方法を紹介しておきます。
define
例えば2番ピンにLEDをつけたとします。もちろん、ピン番号を毎回覚えておいて「2番ピンに〜」で指定するのもありかもしれないです。でも、これが何個ものLEDを扱うようになると大変なことになりますよね?
そこで登場するのがdefineです。
書き方はこんな感じ。
#define LED 2
これは「LEDって書いてたら2って読み替えて」ということです。
C/C++に詳しい方には特に注意ですが、;や=は入らないです。入れてしまうと適切に定義ができずにエラーを吐きます。
コメントアウト
コメントアウトとはプログラムとして認識されない文字のことです。なんでこんなものが必要かというと、流石にパッと見ではプログラムが何をしているのかわからないので共有するときに他の人にも何をしているのか分かるようにするため、そして自分が久しぶりに見たときに分かるようにするという意味もあります。
書き方は
//これがコメントアウト
/*これもコメントアウト*/
コメントアウトされると文字の色自体が変化します。そのためコメントアウトされるたことは簡単にわかるとは思います。
種類は2種類あり、//と書く方法と/* */と書く方法がありますが、用法が異なります。
1つ目で書くと、その行の中で以降の文字がコメントアウトされます。
2つ目で書くと、これらで囲まれた部分は何行先まで囲まれていても、囲まれている部分全てがコメントアウトされます。
勿論ですが、わかりやすい言葉で書くほうが良いです。
setupまで
それでは、実際にプログラムを書いていきましょう。
#define LED 2
void setup() {
// put your setup code here, to run once:
pinMode(LED,OUTPUT);
}
では、確認していきましょう。
#define LED 2
前述のように、ここでは2番ピンにLEDを付ける予定なので定義しておきます。
void setup() {
// put your setup code here, to run once:
pinMode(LED,OUTPUT);
}
ここではsetup、つまり一回限りの動作をプログラムしています。
pinMode
pinMode(LED,OUTPUT);
ここではそれぞれのピンがどういう属性なのかを書いていきます。
pinModeについては、この記事に書いていますが、括弧内に関しては前(ここでいうLEDのところ)でピンを指定して、後(ここでいうOUTPUT)で属性を書きます。打ち込める属性は
- OUTPUT:出力を行うピン
- INPUT:入力を行うピン
- INPUT_PULLUP:INPUTでのHIGHとLOWの定義が逆転する
を入れることができます。
loop
loopには以下のように書き込みます。
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
delay(1000);
}
では、これについても説明していきます。
digitalWrite
digitalWrite(LED,HIGH);
digitalWriteに関しては、指定したピン(ここでいうLED)に出力をおこなうというものです。出力に関してはHIGHとLOWが存在し、HIGHだと5V(ものによっては3.3V)を出力しLOWだと0Vになります。
これで指定されたHIGHやLOWに関しては再び指定されるまでずっと保持されるので、例えばHIGHの状態を保持したければ一回だけHIGHと書けばいいです。
delay
delay(1000);
delayは括弧内の時間だけ待つという関数です。ここで書かれる数字は単位がmsとなるため、例えば1000と書けば1000ms(=1s)となります。
さて、ここまでくるとこんな感じになっているのではないでしょうか?
#define LED 2
void setup() {
// put your setup code here, to run once:
pinMode(LED,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
delay(1000);
}
では、早速動かしてみましょう。
配線
さてここで、見慣れない白い板が出てきましたね。これについても説明していきます。
ブレッドボード
白い板の正体はブレッドボードと呼ばれるものです。これは図の縦方向の5つの穴が電気的に繋がっていて、これによってはんだ付けや撚り線をしなくても接続ができるというすぐれものです。
ただし、上下の+と−に関しては横で繋がっています。
要するに、下のような感じに繋がっています。
アナログピンとデジタルピン
arduinoにはアナログピンとデジタルピンが存在します。
これら自体はピンの番号にA0といった感じで最初にAが付いていればアナログ、無ければデジタルピンです。
アナログピンでは電圧の高さを細かく見ることができます。デジタルピンではそれができず、電圧が高い低いですべてを判別します。
5VピンGNDピン
また、これ以外にも一定の電圧を出力するピンやリセットを検知するピンなどが存在します。
その他のピンに関しては、この記事がわかりやすいかと思います。実はこのピンにはこういう意味もあるとか、難しすぎるので触れていない内容もあるので気になる方は調べてみてください。
実行してみよう
では、実際に作ったプログラムを実行してみましょう。実行するにはArduinoのバージョンや送信先を指定しなければいけません。その方法も含めて説明していきます。
ボードの指定
Arduinoとひとくくりに言っても、たくさんの種類があります。そして、それぞれに実装されているチップも異なってくるので、使っているArduinoが何者かを教えてやる必要性があります。
では、Arduinoが何者か教えてみましょう。
どのパソコンでも上の方に「ツール」というボタンがあります。ここからボードというところを選択します。
ボードを選択すると、今選択されているボードにチェックマークがあります。ここから今使っているボードを指定します。例えばArduino UNOを使っている人はArduino/Genuino Unoと書かれたボードを指定します。
これでボードの指定が完了しました。
シリアルポートの指定
次に、シリアルポートの指定を行います。これはどういう接続方法をしているかを指定するものです。
恐らく、刺しているボードの名前がそのまま表示されるかと思います。
ファイルの書き込み
これが完了したらいよいよ書き込みです。左上にこのようなボタン類があります。左から「検証(コンパイル)」「書き込み」「新規」「開く」「保存」ですが、基本的に右2つを押すだけで保存も行われます。
では、実際に書き込みを行いましょう。左から2つ目のボタンをクリックするとコンパイルと書き込みが実行されて下のような表示が画面下に表示されたら成功です。
もしうまくいかなかった場合は下のような画面が表示されて、エラーを吐きます。
黒背景の部分にエラーの原因が表示されるので、それに従って対処していってください。
ところで…
これでチカチカとLEDが点滅して、目がチカチカして目がしんどいなと思っている方もいるかも知れません。
「これ、どうやったら終わるんですか?」
こんなことを聞きたくなるかもしれませんね。実際に聞かれたことがあります。でも、今回言いましたよね?
Arduinoの動き方は決まっており、
setup
↓
loop
↓
loop
↓
loop
↓
︙
つまり、残念ながら消えません。でもご安心ください。3つ消す方法があります。
1.Lチカではない別のプログラムを書き込む
2.LEDをブレッドボードから抜く
3.USBをぶち抜く
そうすると、あら不思議電気が消えました!ちなみに、私のオススメは3です。過激っぽいのと手っ取り早いのでいいですよ。
(ただし、電源供給が再開されると直前のプログラムが再開されるのでLチカが再開します)
次回以降ではセンサーを扱っていきます。