ボタンを押すと何が起こるのか?
以前,デジタル出力はLDで説明した。今回はデジタル入力について説明しよう。
pin の入力がHIGHかLOWかを検知する。
Aruduinoは下の通り。
pin 2からブッシュボタンの片側の足につなげ,もう片方の足はGNDへ。
(ブレッドボード中央の黒い丸がボタン。足が左右に2本ある)
回路図にすると次の通り。
スケッチの例から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らしい(要出典)
なので、入力が0VでLOW,5VでHIGHになる。
ボタンを押したら pin はGNDにつながるので0Vでいいだろう。では離したときの5Vは?
実は,プルアップといってpinを抵抗経由で5Vにつながった状態,下の赤で囲まれた部分だ。
ボタンを離すと5Vになり、押してても抵抗があるので電流はほとんど流れない。
1
0
1
1
0
になったかもしれない。(運がよければ11111)
プルアップがないめたに,pin 2は宙ぶらりんでどんな電圧か分らない。そのためだ。
上の回路図の通り外部プルアップでもいいが,Arduinoは内部にプルアップを持っている。
プルアップを使うには明示的に指定しなければならない。
それが,
pinMode(pushButton, INPUT_PULLUP);
INPUT_PULLUPはピンは入力でプルアップしろという意味。
なぜ,スケッチ例でINPUTを使ったのだろう?



