皆様、こんにちは。
前回では、「RenesasRulz」のWebサイトの見方と、初心者向けのプログラムを探して実行するまでをお話ししました。
今回は、第3回で初めて「がじぇるね」を操作したときのサンプルプログラムと、前回(第4回)見つけた初心者向けのプログラムとを題材にして、使われている命令や値の意味を調べて理解することを目指します。
それでは、さっそく始めましょう。
第3回でWebコンパイラに入っていたサンプルプログラムのスケッチは、以下のとおりです。
/*GR-SAKURA Sketch Template Version: V1.02*/
#include <rxduino.h>
#define INTERVAL 100
void setup()
{
pinMode(PIN_LED0,OUTPUT);
pinMode(PIN_LED1,OUTPUT);
pinMode(PIN_LED2,OUTPUT);
pinMode(PIN_LED3,OUTPUT);
}
void loop()
{
digitalWrite(PIN_LED0, 1);
delay(INTERVAL);
digitalWrite(PIN_LED1, 1);
delay(INTERVAL);
digitalWrite(PIN_LED2, 1);
delay(INTERVAL);
digitalWrite(PIN_LED3, 1);
delay(INTERVAL);
digitalWrite(PIN_LED0, 0);
delay(INTERVAL);
digitalWrite(PIN_LED1, 0);
delay(INTERVAL);
digitalWrite(PIN_LED2, 0);
delay(INTERVAL);
digitalWrite(PIN_LED3, 0);
delay(INTERVAL);
}
このスケッチは、4つあるLEDが順に点灯してゆくものでした。
一方、第4回で見つけたスケッチは、
・がじぇるねはじめてのプログラミング動画(ビギナー向け)
(http://japan.renesasrulz.com/gr_user_forum_japanese/w/wiki/56.aspx)
に掲載されています。これをそのまま持って来ます。
/*GR-SAKURA Sketch Template Version: V1.01*/
#include <rxduino.h>
void setup()
{
// GR-SAKURAのLED0~LED3を出力として利用できるようにする。
pinMode(PIN_LED0,OUTPUT);
pinMode(PIN_LED1,OUTPUT);
pinMode(PIN_LED2,OUTPUT);
pinMode(PIN_LED3,OUTPUT);
// GR-SAKURAの青スイッチ(SW2)を入力モードにする。
// ※赤スイッチ(SW1)はリセットなので使えません。
pinMode(PIN_SW, INPUT);
}
void loop()
{
// 青スイッチがそのまま(PIN_SW = HIGH)
// 下記のdigitalReadが、端子の状態を読み込むライブラリです。
if(digitalRead(PIN_SW) == HIGH){
digitalWrite(PIN_LED0, 1);
digitalWrite(PIN_LED1, 1);
digitalWrite(PIN_LED2, 0);
digitalWrite(PIN_LED3, 0);
// 青スイッチがPUSH中(PIN_SW = LOW)
}else{
digitalWrite(PIN_LED0, 0);
digitalWrite(PIN_LED1, 0);
digitalWrite(PIN_LED2, 1);
digitalWrite(PIN_LED3, 1);
}
}
このスケッチの動作は、青スイッチを押しているときのみ、点灯するLEDが切り替わるものでした。
この2つのスケッチを見比べて、使われているライブラリと値、文法を抜き出してみます。
「ライブラリ」とはプログラムの集まりの事ですが、ここでは「がじぇるね」に与える指示や命令と言った方がわかりやすいかもしれません。
まず、人間が理解する表題は /* */ で区切られた中に書かれ、注釈は // 以降に書かれています。// で注釈を記入する箇所は、どの行でも良さそうです。
次に、構成です。
2つのスケッチに共通なものは、
#include <rxduino.h>
void setup()
{
}
void loop()
{
}
で、 { } の間に命令を書いていることが分かります。
ここに使われている
・#include <rxduino.h>
・void setup()
・void loop()
の3つをGoogleなどのインターネット検索で検索すると、以下のことがわかります。
・ 「がじぇるね」で使われているライブラリがRXduinoであること、
・ RXduinoは、「がじぇるね」に使われているRXマイコン用のArduinoライクなプログラミングができるライブラリであること。
・ void setup() { } は、ユーザーが定義する初期設定です。入力や出力に何を使うか指定します。
・ void loop() { } は、ユーザーが「がじぇるね」に何をさせるかのプログラムの本体です。Loopなので、繰り返し実行されます。
void setup() { } とvoid loop() { } は、Arduinoでの基本的なプログラムの書き方で、「がじぇるね」もこれを踏襲しています。
検索結果の中には、RXduinoの提供元が提供するマニュアルやArduinoのプログラミングについて詳しく説明されているサイトが含まれていますので、これからプログラミングを学ぼうと思われる方は参照されると良いでしょう。
他に使われているライブラリは、以下の4つです。
・ pinMode
・ digitalRead
・ digitalWrite
・ delay
これらは何か解説を見ないとわかりづらいですので、ここからは、初心者向けにわかりやすく書かれた「SAKURAスケッチリファレンス」を参照しながら進めましょう。
「SAKURAスケッチリファレンス」は、以下のURLにあります。
(http://tool-cloud.renesas.com/Renesas/ref/gr_reference_j.html)
【写真1】
「LIBRALY」をクリックすると、「がじぇるね」で使える各種のライブラリの説明を見ることができます。ここに、上の4つのライブラリも掲載されています。そのまま引用すると
・ pinMode: 入力か出力か選択します。
・ digitalRead: ピンからHIGHか、LOWを読み込みます。
・ digitalWrite: ピンの出力をHIGHか、LOWにします。
・ delay: プログラムを指定した時間だけ一時停止します。単位はミリ秒です。
それぞれの説明には、文法も記載されていますので、上で引用した第3回のサンプルプログラムでどのように指定しているか見てみましょう。
/*GR-SAKURA Sketch Template Version: V1.02*/
#include <rxduino.h> → rxduinoのライブラリを読み込む
#define INTERVAL 100 → INTERVALを100ミリ秒と規定する
void setup()
{
pinMode(PIN_LED0,OUTPUT); → LED0を出力とする
pinMode(PIN_LED1,OUTPUT); → LED1を出力とする
pinMode(PIN_LED2,OUTPUT); → LED2を出力とする
pinMode(PIN_LED3,OUTPUT); → LED3を出力とする
}
void loop()
{
digitalWrite(PIN_LED0, 1); → LED0を1とする(点く)
delay(INTERVAL); → INTERVAL(100ミリ秒と規定)の時間だけ一時停止
digitalWrite(PIN_LED1, 1); → LED1を1とする(点く)
delay(INTERVAL); → INTERVALの時間だけ一時停止
digitalWrite(PIN_LED2, 1); → LED2を1とする(点く)
delay(INTERVAL); → INTERVALの時間だけ一時停止
digitalWrite(PIN_LED3, 1); → LED3を1とする(点く)
delay(INTERVAL); → INTERVALの時間だけ一時停止
digitalWrite(PIN_LED0, 0); → LED0を0とする(消す)
delay(INTERVAL); → INTERVALの時間だけ一時停止
digitalWrite(PIN_LED1, 0); → LED1を0とする(消す)
delay(INTERVAL); → INTERVALの時間だけ一時停止
digitalWrite(PIN_LED2, 0); → LED2を0とする(消す)
delay(INTERVAL); → INTERVALの時間だけ一時停止
digitalWrite(PIN_LED3, 0); → LED3を0とする(消す)
delay(INTERVAL); → INTERVALの時間だけ一時停止
}
実際の「がじぇるね」の動作としては、この繰り返しです。
これで、LED0,1,2,3,の順に点いていってLED0,1,2,3,の順に消えていく、つまり流れるように点灯することが理解できるかと思います。
次に、「がじぇるねはじめてのプログラミング動画」のスケッチを見てみましょう。
/*GR-SAKURA Sketch Template Version: V1.01*/
#include <rxduino.h> → rxduinoのライブラリを読み込む
void setup()
{
// GR-SAKURAのLED0~LED3を出力として利用できるようにする。
pinMode(PIN_LED0,OUTPUT); → LED0を出力とする
pinMode(PIN_LED1,OUTPUT); → LED1を出力とする
pinMode(PIN_LED2,OUTPUT); → LED2を出力とする
pinMode(PIN_LED3,OUTPUT); → LED3を出力とする
// GR-SAKURAの青スイッチ(SW2)を入力モードにする。
// ※赤スイッチ(SW1)はリセットなので使えません。
pinMode(PIN_SW, INPUT); → スイッチを入力とする
}
void loop()
{
// 青スイッチがそのまま(PIN_SW = HIGH)
// 下記のdigitalReadが、端子の状態を読み込むライブラリです。
if(digitalRead(PIN_SW) == HIGH){ → スイッチがそのままの時は、
* ここは、スケッチリファレンスの説明にありませんが、 if ( ) { } else { } で、条件分岐を記述するC言語の文法です。=は2こ重ねて(==)「同じ」を意味します。
digitalWrite(PIN_LED0, 1); → LED0を1とする(点く)
digitalWrite(PIN_LED1, 1); → LED1を1とする(点く)
digitalWrite(PIN_LED2, 0); → LED2を0とする(消す)
digitalWrite(PIN_LED3, 0); → LED3を0とする(消す)
// 青スイッチがPUSH中(PIN_SW = LOW)
}else{ → そうでなかったら、
digitalWrite(PIN_LED0, 0); → LED0を0とする(消す)
digitalWrite(PIN_LED1, 0); → LED1を0とする(消す)
digitalWrite(PIN_LED2, 1); → LED2を1とする(点く)
digitalWrite(PIN_LED3, 1); → LED3を1とする(点く)
}
}
上の、「そうでなかったら」は、「スイッチがそのままでなかったら」=「スイッチが押されたら」になります。
これで、スイッチがそのままの状態とスイッチが押されたときで、点灯する2個のLEDが切り替わることが理解できるかと思います。
いよいよ次回は、ここまでで出てきたライブラリや文法を使って、LEDを自在に点灯させるプログラムを作ってみましょう。
次回をお楽しみに!