Arduino Nano R4の活用 ③ LEDを点滅するスケッチ スケッチの説明<第1回>

スケッチの構造

 コンピュータはソース・プログラムをコンパイルして実行するコードを作り、コンピュータのメモリに転送してから動きます。昔から、電子工作などではコンピュータをマイコンと呼んでいます。

 プログラムを書く(コーディングする)言語は世の中にたくさんありますが、C言語やC++言語はよく使われます。Arduinoのスケッチでは、Arduino特有の言語が用意されていますが、コンパイルすると何度か出てきましたが、矢印のアイコンをクリックすると、一度C++言語に変換され、C++のコンパイラで、実行できるコードになります。

 C言語のルールと同じように、コメントは // 以降に書きます。/* と */ に挟むようにもコメントを書くことができます。

 C言語ではmain()が必ずありますが、Arduinoでは隠されています。その代わりに、

  • 一度だけ実行したい処理 setup()
  • なんども繰り返したい処理 loop()

が用意されています。これで終わりですという処理は書きません。これはマイコン特有な理由からです。常に何かを繰り返し行うということをマイコンにやらせたいのが普通だからです。

 Blink.inoのスケッチです。

コンパイル

 コンパイルのアイコンをクリックすると、コンパイル、リンク、実行プログラムのマイコンへの書き込みが行われます。

 スケッチの下側の黒字の領域に、処理が行われている様子が表示されます。エラーが起こると途中で中断します。

コメント

 コメントとは注釈文で、プログラムには何も寄与しません。しかし、コメントは残しておくようにしないと、あとで見た時に、何をしていたかがわからないことがあります。昨日の自分は他人です。

Blink.inoで出てきた命令

pinMode(LED_BUILTIN, OUTPUT);
 
 端子を出力(OUTPUT)に使うか入力(INPUT)にするかを指定します。
 ディジタル信号を扱うD0~D13は、
 
pinMode(D0, OUTPUT);
pinMode(D13, INPUT);
 
のように書きます。
 A0~A7はアナログ関係を扱う端子ですが、ディジタルの入力、出力にも使えます。
 

digitalWrite(LED_BUILTIN, HIGH);

 LED_BUILTIN端子をHIGHにします。このマイコンでは5Vになります。

digitalWrite(LED_BUILTIN, LOW);
 

 LED_BUILTIN端子をLOWにします。このマイコンでは0Vになります。

 HIGHとLOWはArduino言語では最初から定義されている定数なので、大文字のつづりで使います。

 HIGHを1、LOWを0と記述しても同じ処理になります。

 ただHighやhighは未定義なので、コンパイル時にエラーになります。

 利用したい場合は、自分で宣言します。

int high = 1;

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, high);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second

delay(1000);                      // wait for a second

コメントにあるように1秒待ちます。単位はmsです。0.5秒なら500ですね。

 最初単位の1を指定してオシロスコープで観測します。

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(D13, OUTPUT);
}


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

 1/1000単位で停止できる関数が、

delayMicroseconds(us)

です。

 最小単位が1usですが、実行してみると、サイクルは2usではなく5.87usになりました。これは、

digitalWrite(D13, HIGH); や digitalWrite(D13, LOW); の処理時間が加わるためです。
 

前へ

Arduino Nano R4の活用 ② 基本!LEDを点滅