ボタンを押すと何が起こるのか? | Arduino(アルドゥイーノ)始めます

ボタンを押すと何が起こるのか?

以前,デジタル出力はLDで説明した。今回はデジタル入力について説明しよう。

pin の入力がHIGHかLOWかを検知する。

Aruduinoは下の通り。

pin 2からブッシュボタンの片側の足につなげ,もう片方の足はGNDへ。


MOTのブログ


(ブレッドボード中央の黒い丸がボタン。足が左右に2本ある)
回路図にすると次の通り。


MOTのブログ

スケッチの例からDigitalReadSerialを選択しよう。

前々回のブログ「シリアル通信 日本語は送信できるか?」を参照のこと。

いつもの通り,最初のコメントは省略。
int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}
-------------------------------------------------------
 int pushButton = 2;
ボタンにつながるピンは2を使う。 
  pinMode(pushButton, INPUT);
pushButton = 2(pin)を入力(INPUT)に設定する。
  int buttonState = digitalRead(pushButton);
pushButtonの状態をdigitalRead()はbuttonStateに返す。

buttonStateはHIGHかLOWのどちらかなのだが,ボードに書き込んでモニタすると,

(モニタはメニュー-ツール-シリアルモニタ)
押されたら0, 離したら1になるはずだ。これは、Arduino.hというファイルの中で

#define HIGH 0x1
#define LOW 0x0
と定義されているからだ。つまりHIGHのときはbuttonState = 1ということ。

(Arduino.h, #defineの説明は別の機会に)


HIGHかLOWの境界は1.1Vらしい(要出典)


MOTのブログ

なので、入力が0VでLOW,5VでHIGHになる。


ボタンを押したら pin はGNDにつながるので0Vでいいだろう。では離したときの5Vは?

実は,プルアップといってpinを抵抗経由で5Vにつながった状態,下の赤で囲まれた部分だ。

ボタンを離すと5Vになり、押してても抵抗があるので電流はほとんど流れない。


MOTのブログ
ボタンを離した状態で,

1

0

1

1

0

になったかもしれない。(運がよければ11111)

プルアップがないめたに,pin 2は宙ぶらりんでどんな電圧か分らない。そのためだ。

上の回路図の通り外部プルアップでもいいが,Arduinoは内部にプルアップを持っている。

プルアップを使うには明示的に指定しなければならない。

それが,

pinMode(pushButton, INPUT_PULLUP);

INPUT_PULLUPはピンは入力でプルアップしろという意味。


なぜ,スケッチ例でINPUTを使ったのだろう?