とりあえず動かしてみる(Arduino詳解)

詳しく解説!!Arduino-その3です。前回の記事はこちらです。

hirocom777.hatenadiary.org

動かしてみよう

 それでは動かしてみましょう。動かすといっても電源入れるだけ。電源はUSBケーブルから供給できます。タイプAコネクタとタイプBコネクタのケーブルを使います。以下の形をしたものです。

f:id:HiroCom777:20200315131900p:plain

繋げてみる

 タイプAコネクタ(平べったい方)を電源の入ったPCのUSBポートにタイプAコネクタをArduino UnoのUSコネクタに接続しましょう。

f:id:HiroCom777:20200318212530j:plain
まず、ボード上の①の個所にあるLEDが緑色に点灯したと思います。電源が供給されましたってことですね。そして、買ってきたばかりのArduino Unoの場合は、ボード上の②の個所にあるLEDがオレンジで点滅していると思います。予め動作確認用?のプログラムが書き込んであるからです。

ちなみに、Arduinoの世界ではプログラムのことを『スケッチ』と呼んでいます。

スケッチを見てみる

 では、どのようなスケッチが書き込まれているのでしょうか。実は、PCに開発環境をインストールした際にこのスケッチもダウンロードされていますので見てみましょう。手順は以下のようになります。

①ArduinoIDEの立ち上げ
 インストールしてあるArduino開発用ソフトArduinoIDEを立ち上げます。Windows10の人は、Windowsメニューの"A"欄にArduinoが追加されているので選択すると起動します。
②ファイルメニューの"スケッチ例"⇒"01.Basic"⇒"Blink"を選択します。
③すると、新しいArduinoIDEが立ち上がってスケッチ"Blink"が表示されます。

表示されたスケッチは何やら英語で色々書かれていますが前半はコメント文なので読まなくてもOKです。具体的に言うと、/*~*/でくくられた範囲と、行内の//以降はコメント文です。以下にコメントを削除したスケッチ本体部分を抜粋しますね。

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); 
  delay(1000); 
  digitalWrite(LED_BUILTIN, LOW); 
  delay(1000); 
}

setupとloop

 setup()とloop()の後に{}でくくった記述があります。(voidってのは、ちょっと放っておいてください。)Arduinoのスケッチはこの二つのブロックで構成されています。

・ setup
  setupは起動時(電源投入時、リセット時)に1度だけ実行される内容です。初期設定の内容が記述されます。だから setupなんですね。
・ loop
  loopは setup実行後に実行される内容です。最後まで実行されるとloop()ブロックの先頭に戻ります。つまり、無限ループ。だから loopなんですね。

次に、各ブロック内に記述してあるコマンドについて見ていきます。

コマンド

・pinMode
 pinModeはArduinoの入出力ピンの状態を決めるコマンドです。以下のように記述します。

 pinMode(ピン番号、状態(INPUT/OUTPUT));

入力(INPUT)、出力(OUTPUT)のどちらかを選びます。他にも設定できる内容があるのですが、それはまた別の機会にします。設定するピンはピン番号で指定しますが、ここでは"LED_BUILTIN"となっています。これは予約語で、動作確認用LEDが接続されているピンの番号を意味します。(Arduino UNOでは13番)

各ピンはHeaderコネクタに接続されていて、以下の表示部分で確認できます。

f:id:HiroCom777:20200318215242j:plain
つまり、このスケッチのsetupでは13番ピンを出力として設定しているのです。

・delay
 delayは、一定の時間何もしない命令です。カッコの中に数字を入れて何もしない時間を指定します。単位はミリ秒です。

 delay(時間(ミリ秒));

 前回お話した16MHzの水晶振動子をもとにして時間を決めます。

・digitalWrite
 digitalWriteはArduinoのピンの出力状態(HIGH/LOW)を設定するコマンドです。以下のように記述します。

 digitalWrite(ピン番号、出力状態(HIGH/LOW));

 ピンは、あらかじめpinModeコマンドで出力(OUTPUT)に設定されていなければなりません。

つまり、このスケッチのloopでは13番ピンにHIGHを出力してから1秒(1000ミリ秒)まち、13番ピンにLOWを出力してから1秒待ちます。loopは最後まで行くとその先頭に戻りますから結果、13番ピンに接続されてLEDが点滅するってわけです。

スケッチを変更してみよう

 せっかくなのでスケッチを変更して書き込んでみましょう。以下のようにしてみました。シンプルになりましたね!!

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, !digitalRead(13)); 
  delay(500); 
}

 まず、ピンの指定を番号(13)に変更してみました。待ち時間は500ミリ秒に変更しました。あと、digitalWriteの出力状態の指定は何なんでしょうか?

・digitalRead
 digitalReadはdigitalWriteの反対です。Arduinoのピンの入力状態(HIGH/LOW)を読み込みこんで返します。以下のように記述します。

 digitalRead(ピン番号);

でも、13番ピンは出力(OUTPUT)に設定したはずですよね。実は、出力に設定したピンの出力状態も読めるんです。

そして、その先頭についている"!"は反対を意味します。LOWならHIGH、HIGHならLOWとなります。

つまり、このスケッチのloopでは13番ピンの出力を反転してから0.5秒(500ミリ秒)待つ、を繰り返しているんです。

書き込んでみよう

 それでは、書き込んでみましょう!!まず準備から。Arduino UNOはUSBケーブルで接続しておいてください。次にメニューのツールでボードを"Arduino UNO"に選択します。その下のシリアルポートも"COM?(Arduino UNO)"となっていることを確認してください。

いよいよ書込みです。メニューのスケッチで"マイコンボードに書き込む"を選んでみてください。書き込みが開始されます。

正常に書き込みが完了すると、点滅のスピードが速くなります。

いかがでしょうか?意外と簡単にプログラミングできると思いませんか?

次回はいよいよGROVEシステムの登場です。いろいろなデバイスを簡単にボードに接続できるようになります。まずは、GROVEシステムの概要を説明していきたいと思います!!
hirocom777.hatenadiary.org


Arduino UNO入門の連載記事はコチラからどうぞ!!