第20回 pinMode命令とdigitalRead命令

今回はpinMode命令の復習をして、スイッチの状態を読み取る命令を習得します。

pinMode命令の復習

第10回の記事でpinMode命令を説明しましたが、その時はパラメータの「INPUT_PULLUP」を説明していませんでした。前回の記事でプルアップ機能を説明しましたので、復習もかねてpinMode命令をまとめます。

pinMode命令は以下のように書きます。

pinMode命令

「機能」のところには「OUTPUT」「INPUT」「INPUT_PULLUP」のいずれかを書きますが、それぞれの場合でArduinoボードの内部がどのようになるのかまとめておきます。

機能: OUTPUTのときの内部のようす

pinMode命令で「OUTPUT」を指定すると、以下のようにスイッチ機能が選択されます。このとき、digitalWrite命令で出力制御できるようになります。

pinMode/OUTPUT

機能: INPUTのときの内部のようす

pinMode命令で「INPUT」を指定すると、以下のように電圧計機能が選択されます。この場合の注意点として、Arduinoボードの端子に何も接続されていない場合、電圧計で読み取る値は不安定になります。以下のようにスイッチを接続する場合は、次に説明する「INPUT_PULLUP」を使います。

pinMode/INPUT

機能: INPUT_PULLUPのときの内部のようす

pinMode命令で「INPUT_PULLUP」を指定すると、「INPUT」の時と同じように電圧計機能が選択されます。「INPUT_PULLUP」ではさらにプルアップ機能が追加されます。Arduinoボードの端子に何も接続されていない場合は、電圧計の値は5Vになります。

23番端子に接続したキッチンタイマーのスタートスイッチは、pinModeでINPUT_PULLUPを指定します。

pinMode/INPUT_PULLUP

pinMode命令はこれでかんぺきです。

 

digitalRead命令

前回の記事で追加したスイッチは、以下のように動作します。

まずスイッチをOFFにすると、プルアップ機能が働いて電圧計は5Vになります。

スイッチOFFの動作

スイッチをONにすると、内部電池のマイナス側に接続されますので電圧計は0Vになります。

スイッチONの動作

さて、内部の電圧計はこのように電圧を測定しているのですが、この電圧計の値を読み取るのはどうすればいいのでしょうか。

この電圧計を読み取るには「digitalRead」(デジタルリード)という命令を使います。digital(デジタル)は0か1か、ONかOFFかという2つの状態を意味する言葉でしたよね。Read(リード)は「読む」という意味です。「digitalRead」は「ONかOFFかを読み取る」という感じの意味になります。

このdigitalReadは以下のように使用します。

digitalRead命令

前回の記事でスイッチは23番に接続しましたので、スイッチの状態、つまり内部の電圧計を読み取る場合は以下のように書けばOKです。

digitalRead(23);

あとはスケッチで確認するだけですね。それではスケッチを作ってみましょう。

 

スイッチ状態を読み取るスケッチ

それでは、0.5秒ごとにスイッチの状態を読み取るスケッチを作成してみましょう。スケッチを新規作成して「switch」という名前で保存してください。

スイッチを接続している端子は23番ですので、以下のように端子番号を#defineしました。「スイッチ」は英語で「Swtich」ですので、このまま使用しました。

#define SWITCH 23

また、0.5秒ごとにスイッチの状態を読み取るので、delay命令のパラメータとして以下の#defineをしました。読み取る時間、ということで「Read Jikan」にしてみました。

#define READ_JIKAN 500

あとはpinMode命令、digitalRead命令、delay命令でスケッチを作成すればOKです。以下のように作成してみました。

digitalReadのスケッチ

入力するのは面倒だと思いますので、以下のスケッチをコピペして試してください。

/*
 * 内容: スイッチの状態(内部の電圧計)を読み取る
 * 変更履歴:
 *    2019.8.14: 新規作成
*/

#define SWITCH 23 // スイッチを接続している端子番号
#define READ_JIKAN 500 // スイッチの状態を読み取る時間間隔(単位:ms)

void setup() {
  pinMode(SWITCH, INPUT_PULLUP);
}

void loop() {
  digitalRead(SWITCH);
  delay(READ_JIKAN);
}

スケッチの準備ができたら、Arduinoボードに送って動作確認してみましょう。

?????????

何か起こりましたか? 何も起きませんよね。動作しているのかサボってるのかさっぱりわかりません。

実は、Arduinoはせっせと0.5秒ごとに23番端子の電圧を読み取っているんです。digitalRead命令は、指定した端子番号の電圧を読み取るだけなんです。それ以上のことはしないんです。なんだか気が利かないですね。

でも、なんとかして読み取った結果を知りたいですよね。そこで次回の記事では、Arduinoボードから読み取ったデータを教えてもらうことにします。

 

更新履歴

日付 内容
2019.8.14 新規投稿