Arduinoで電子工作2

前回の続きです。

3.Lチカするスケッチ(プログラム)を作る

Arduino IDEを起動すると、初期値で以下のスケッチが入っています。

void setup() {
}
void loop() {
}

スケッチのお作法としてsetupとloopの中に自分のプログラムを書き込んでいきます。
C言語を触ったことがあると、あれmain()が無い!!となりますが表示されていないだけでmain()はあります。

#include 
int atexit(void (* /*func*/ )()) { return 0; }
void initVariant() __attribute__((weak));
void initVariant() { }
void setupUSB() __attribute__((weak));
void setupUSB() { }
int main(void)
{
	init();
	initVariant();
#if defined(USBCON)
	USBDevice.attach();
#endif
	setup();
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
	return 0;
}

こんな感じで。
スケッチを作る人はmainの事をあまり意識せずに、setupとloopの中身だけ書いてあげればよい・・・という作りになっています。
setup()は起動した直後に1回のみ実行され、その後loop()が繰り返し実行されます。
つまり初期化設定をsetup()に書き、実際の処理はloop()に書けば良い、となります。


さてArduino UNO R3のポート#13はArduinoの基板上にLEDが付いていますので、それをLチカ(LEDを点滅させる)してみます。
基板上のLEDを点滅させるのであれば、外部の回路(ブレッドボードや電子部品)を取り付けなくても触ってみることができます。

void setup() {
  pinMode (LED_BUILTIN, OUTPUT);
}
void loop() {
  static byte led_stat = 0;
  digitalWrite (LED_BUILTIN, led_stat);
  delay (1000);
  led_stat = led_stat xor 0xff;
}

こんな感じでスケッチ作りました。

ArduinoUNOR3でLチカするスケッチ.png
実際のArduino IDEでは、こんな感じで色分けして表示されるので見やすいです。


setup()の中身はpinMode (LED_BUILTIN, OUTPUT);だけです。
pinMode()はポートを使用方法をどうするか(デジタル?アナログ?PWM?、入力?出力?)設定する関数です。
Arduino UNO R3ではポート#13はLED_BUILTINと定義されているので、LED_BUILTINと指定するとポート#13(内蔵LEDはポート#13に接続されている)を選択したことになります。
ここではLEDを点灯・消灯させるので、デジタルで出力するための設定(OUTPUT)を行っています。

loop()の中身は

static byte led_stat = 0;
digitalWrite (LED_BUILTIN, led_stat);
delay (1000);
led_stat = led_stat xor 0xff;

の4行で、
1行目はled_statというバイト変数(8ビット値)を定義して、最初に実行したときに値を0にしています。
2行目はポート#13にled_statの値を出力しています。0で消灯、0以外で点灯になります。
3行目は1000ミリ秒(=1秒)何もせずに待つ、という意味です。
4行目はled_statの値を0xff(=255)でxorしています。最初に0を入れてありますので、実行する度に0と255の値が入れ替わることになります。


つまり、1回目の実行時は、
led_statに0が入る
ポート#13に0を出力する(LEDを消灯させる)
1秒待つ
led_statを255にする

2回目の実行時は
ポート#13に255を出力する(LEDを点灯させる)
1秒待つ
led_statを0にする

3回目の実行時は
ポート#13に0を出力する(LEDを消灯させる)
1秒待つ
led_statを255にする

・・・と延々とLEDを点灯させたり、消灯させたりを繰り返して実行させることになります。


目的のLチカを実行するスケッチが作れました。


4.Arduino UNOにスケッチを送り込んで実行する

Arduino IDEでLチカするスケッチを検証してみます。

ArduinoUNOR3でLチカ検証する.png
左上の「✓」をクリックするとスケッチの内容が正しいか検証することができます。

エラーがあると
ArduinoUNOR3でLチカ検証エラー.png
という感じでエラーが表示されます。

ここではloop() の(が消えてしまった場合のエラーです。
下のメッセージを見ると、「(」が無いのに「)」が出てきておかしいという事がわかります。

エラー無くなったらボードに書き込みます。

ArduinoUNOR3にスケッチを書き込む.png

書き込みが終わると、すぐにArduino UNO R3は書き込んだスケッチに従って動作しますので基板上のLEDが1秒周期で点灯・消灯を繰り返します。