2.1 サンプルBlinkでプログラムの基礎を学ぶ

Energiaのサンプルプログラムとして準備されているものを試してみましょう

まずは、基本中の基本であるLEDの点滅です。

図2-1のように[ファイル]→[スケッチ例]→[Basics]→[Blink]を選んでみます。

図2-1 サンプルスケッチのBlinkを選択


この、プログラムをマイコンボードに書き込んでみます
プログラムを書き込むときには、[ファイル]→[マイコンボードに書き込む]を選びます。

すると、ウインドウ下部の黒いメッセージ表示部分に、様々なメッセージが出てきて
最終的に黒い部分のすぐ上に「マイコンボードへの書き込みが完了しました」のメッセージが出てきます

図2-2 書き込み完了

もし、書き込みが失敗するようなら、マイコンボードの接続がうまくいっていないか
通信ポートの設定がおかしいなどの原因が考えられます。

USBからマイコンボードを外して
もう一度、§1のEnergia起動直後からの手順を確認してみてください。

プログラムが書き込まれていると
LED1(赤色のLED)が点滅します。


図2-3 LED1の点滅の様子

次に、このサンプルがどんなプログラムで記述されているか見ていきましょう
Energiaのプログラミング環境は、ほぼC言語に準拠しているので
/* */に囲まれた部分や
//以降の行末までは全てコメントですので、
プログラムの動作に寄与しません。

このサンプルプログラムを、必要な部分だけに絞って抜き出すと以下のようになっています。


#define LED RED_LED

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(LED, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}


たったこれだけです。
まず、Energiaを使うときのプログラムの基本的な構造ですが
setup()というルーチンとloop()というルーチンの2つからできています。
ルーチンとは、命令がひとかたまりになって何らかの処理をするプログラムの一部を指します詳しくは検索するなりリンク先等を参照してください。)
C言語と同じで、ルーチンのことを関数と呼んだりもします。

で、英語でコメントが書いてありますが
setup()はプログラムが始まったときに1回だけ呼び出されるルーチンで
loop()はsetup()が終わったあと、永遠繰り返すルーチンです。
ですので、プログラムの流れとしては
setup()
loop()
loop()
loop()
 ・
 ・
 ・
とloop()の中身を何度も繰り返し動作します。

で、setup()の前にある#defineはC言語と同様で
「文字の読み替えをしますよ」ということです

ここでは、

#define LED RED_LED

と書いていますので
「これ以降、LEDって文字が出てきたらRED_LEDと読み替えます。」
と宣言しています。
これは、どういうことかというと
RED_LEDっていう名前はどこにも出てきてはいませんが、Energiaの中で赤色のLED(つまりLED1)がつながっているマイコンのピンを指す言葉としてすでに定義されています。
LaunchPadの基板を見るとP1.0(LED1)という表示を見つけられるでしょうか?

図2-4 基板上P1.0の表示


この場所は、左上から2番目のピン
つまり、ICのpin2(ICは左上から反時計回りに1,2,3…とピン番号を数えます(参考))を指します。

なので、この行を

#define LED P1_0

と書いても同じ動作をします
P1_0というのはP1.0を指す言葉です。
.(ドット)は小数点として使うなど、他の用途があるため名前を付けるときには使えません
そこで_(アンダースコア,アンダーバー)が使われています。(日本語キーボードなら"Shift+ろ"で入力できます)

次に、setup()の中を見ると

pinMode(LED, OUTPUT);     

とあります。pinmodeという関数は、(以降、C言語にならって命令のことを関数と言ったりもします)
マイコンのピンを入力で使うか出力で使うかを決める命令です。

関数は
pinmode(ピン番号,入出力の方向);
という形になります。

ピン番号はP1_0やP1_1などのピンに割り振られた番号を
入出力の方向は
外部に対して、電圧の変化ON,OFFを出力する場合はOUTPUT
外部から、電圧の変化(スイッチのON,OFFなど)を入力する場合はINPUT
を指定します。

ここでは、
ピン番号はここではLED(つまりP1_0)が指定され
入出力の方向は出力を指定しています。
(LEDに電圧を出力するわけですからOUTPUTとなります)

次は、loop()の中です

digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(1000);               // wait for a second
digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
delay(1000);               // wait for a second

となっています。
digitalWrite関数(Wが大文字です注意してください)は、指定したピンに電圧を出力する命令です。
HIGHであれば高い電圧を(MSP430は3.3[V]で動作しているのでHigh=3.3[V]です)
LOWであれば低い電圧を(ここでは0[V])
出力します。

関数は
digitalWrite(ピン番号,HIGHまたはLOW);
という形になります。

delay関数は一定時間動作を待つ関数です。
待っている間は、何もしません
ただ、同じ状態をじっと保つだけです

関数は
delay(待ち時間[ms]);
という形になります。

つまり、このプログラムでは
高い電圧をLEDに出して、1秒(1000ミリ秒)待って
低い電圧をLEDに出して、1秒(1000ミリ秒)待って
を永遠に繰り返すことで、2秒周期で点滅する動作を行っています。

プログラムの構造を見ながら説明してきたので
長くなりましたが、点滅するプログラムの流れがわかったでしょうか?

0 件のコメント:

コメントを投稿