5-1 LED球の点灯(digitalWrite)

そんなわけでデジタル出力です!
デジタル出力がどういうものかをガッツリ理解するために、まずは下の配線図の通りに回路を作成してみてください。

使う部品リスト

部品 個数
砲弾型LED球 1個
抵抗器
(抵抗値は使うLEDのデータシートをもとに各自計算してください)
1個
注意1

4-3のおさらいです!
回路は必ずArduinoの電源を切った状態で作成し、間違いがないかチェックしてから電源を投入しましょう。

注意2


LEDには極性があります!脚が長い方が+極、短い方が-極です。
脚が長い方(+極)を、電気が侵入する側(図ではブレッドボードの4-D番地)に挿してください!
+極と-極を逆に挿すとLEDは光らないばかりか壊れます。

注意3

抵抗は、あなたが使うLEDのVf・Ifを基に値を計算し、適切なものを用意しご利用ください!
なお電源電圧は5Vです。抵抗の計算の仕方は4-1 電子回路と電気の基本を見てね!
  

まつはちさんからのアドバイス

Arduino Uno R4の各ソケットは最大8mAまでの電流しか流せません。
使う抵抗を慎重に選ばないと最悪焼けちゃいます。R4をご利用の方はご注意ください。
“Arduino LED” で調べると大体落ちてるのはR3のサンプルなので、ご注意です。
  
こちらのページも参考に!:7-3 Arduino Uno R4とR3の違い


「この回路、どこかで見たような?🤔」と思った方は鋭いです。
この回路は、前章のブレッドボードの解説で出てきた、“LEDを点灯させる回路”です。
作ったらArduinoの電源を入れます。手っ取り早いのは起動したパソコンにUSBを挿せばOKです。
挿してLEDが点灯しなければすぐにUSBを抜き、配線とLEDの向きが正しいかを確認してください。
LEDが点灯すれば成功です!ぱちぱち!👏
  
さて、この回路では5VからLEDに常に電気が供給され続けます。
なので、Arduinoの電源がOFFになるか線が抜けたりしない限りLEDが消灯することはありません。
ただただ電気を流し続けてずっと光り続けるだけなので、プログラムも必要ありません。
このような単なる点灯をしたいだけであれば、市販のLEDランプで十分事足ります。

せっかくArduinoを使うのですから、プログラムによって光らせ方や光るタイミングを自在に操作したいです。
そんな時に必要になるのが、「デジタル出力」です!
  
   


  
デジタル出力を使ってLEDを光らせ、且つその点灯パターンをコントロールしてみましょう!
さっき作った回路から赤い線を取っ払って、代わりにArduinoのデジタル10番ソケットから LEDがささっていない側の抵抗の根元(図中8-Aの穴)にジャンパワイヤを繋ぎます。
このデジタル10番ソケットは、“電気を常に流しっぱなし”の5Vソケットとは違い、“電気を流す/止める動作をプログラムで制御できる”ソケットです。
今回はこの10番ソケットからLEDに電気を流したり止めたりするのを繰り返させることで、“ピコピコ点滅する光らせ方”をさせたいと思います。

  

サンプルコード5-1_digitalWrite.inoを開いてください。

int LED = 10; //変数LEDを作り"10番ソケット"を示す「10」を代入

void setup() {
  pinMode(LED, OUTPUT);
  //変数LEDで指定した番号のソケットを、"出力"で使うことを指定
}

void loop() {
  digitalWrite(LED, HIGH);
  //変数LEDの番号のソケットの電圧を5Vにする=電気が流れ点灯する
  delay(300); //0.3秒待機
  digitalWrite(LED, LOW);
  //変数LEDの番号のソケットの電圧を0Vにする=電気が止まり消灯する
  delay(300); //0.3秒待機
}

実はこのプログラムの内容は、ほぼ全てみなさん既に履修済みです。
3-3:Lチカ・コード解説 の内容のおさらいです!

デジタル出力の要点は…

  • setup部のpinMode関数で“使うソケットの番号と入出力のどちらで使うか”を指定する
  • loop部のdigitalWrite関数で“動作させるソケットとさせる動作”を指定する

です!

digitalWrite関数の2つめの引数(引数=今まで「( )の中身」と呼んでいたもの)では、HIGHとLOWのどちらかの動作を指定します。
HIGHは5Vの電圧を出力する=電気が流れてLEDが点灯する
LOWは電圧の出力を止める=電気が途絶えてLEDが消灯する
という違いがあります。

ピン番号の指定に変数を利用する

一か所解説をします。

int LED = 10; //変数LEDを作り"10番ソケット"を示す「10」を代入
~~~~~(中略)~~~~~
pinMode(LED, OUTPUT);

今回宣言部でint型の変数「LED」を宣言して、中身に数値「10」を代入しています。
この「10」はLEDに接続した“10番ソケット”を指すものです。
setup部で出てくるpinModeやloop部で出てくるdigitalWriteといった関数の引数では、操作するLEDのソケット番号を指定する必要があります。

pinMode(13, OUTPUT);//13番のピンを出力モードにする

3-3_Blink.inoのコードでは、上記のようにdigitalWriteの一つめの引数にソケット番号「13」をベタ打ちしていました。
もちろんそれでもダメではないです。

しかし今回のように変数を利用すると、使うソケットを後で変更したくなった時に、変数の数値を変えるだけでプログラム中の全てのソケット指定を変えることができるので、非常に便利です。
(逆にベタ打ちで指定した場合は、プログラムのベタ打ち箇所を全部打ち直さなければなりません)
  


回路を一旦導通しないようにして(例えばArduinoのデジタル10番に挿してあるワイヤを抜く)Arduinoにプログラムを書き込んでから、回路を元に戻してください(10番にワイヤを挿し直す)
Arduinoに電源を投入してLEDがピコピコと点滅すれば成功です👍