Arduinoの最近のブログ記事
(インタラクションデザイン2006第6回の資料です。)
Arduinoでデジタルインプットを使う方法を紹介します。
スイッチを押すとLEDが消えるのと押した回数がカウントされていて、シリアル経由でカウントを教えてくれるものをつくります。スイッチが押されたら何かする、スイッチが何度おされたらどういう処理をする、というようなことができるようになります。
インストールから動作確認までは以下を参照すると良いです。
・Arduino開発環境のインストール方法
・LEDを光らせる
・デジタル/アナログインプット
ちなみに、Arduino.exeを起動しようとしてもできない人はJ2SDKをインストールしてパスを通してあげると起動できるようになると思います。パスの通し方は例えばこちら等を参考にさせてもらうとよいでしょう。
■ブレッドボードへの接続の仕方
- POWERの5VとGndをそれぞれブレッドボードにつなぎます。
- 12番ピンとLEDのアノード(+)、LEDのカソード(-)はGndにつなぎます。
- Digital7番ピンとスイッチをつなぎます。
- 7番ピンとつないだ足は抵抗を通して5Vにつなぎます。
- 抵抗のもう一方の足はGndにつなぎます。
スイッチと電源(5V)の間に入れる抵抗を「プルアップ抵抗」と言います。スイッチが押されていないときに入力を安定させるために抵抗を接続します。(ためしにこの抵抗を取ってつないでみるとLEDが(点滅しているのが見えないほど)ものすごい速さで点滅します。highとlowの値がすごい勢いでデジタルインプットピンに送られています。)
スイッチとGndの間に入れる場合は「プルダウン抵抗」と言います。
■プログラム
つづいてプログラムを書きましょう。
//スイッチ押された回数をカウントする
int ledPin = 12; // choose the pin for the LED
int inPin = 7; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int count=0;//スイッチの押された回数
boolean check=true;//押されっぱなしはカウントしない
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inPin, INPUT); // declare pushbutton as input
}
void loop(){
val = digitalRead(inPin); // read input value
if (val == HIGH) { //スイッチオフ
digitalWrite(ledPin, HIGH); // turn LED OFF
check=false;
} else { //スイッチオン
if(check==false){
check=true;
count++;
Serial.println(count);
digitalWrite(ledPin, LOW); // turn LED ON
}
}
}
int inPin = 7; // choose the input pin (for a pushbutton)
でインプットピンの番号を指定し、
digitalRead(inPin); // read input value
でインプットピンからのデジタル値を取得します。
デジタルインプットなので「HIGH」か「LOW」で値が返ってきます。
感覚的にはスイッチを押すと値がHIGHになりそうなものですが、スイッチがオフの状態で「val == HIGH」になります。その理由は、スイッチを押していない状態でDigital7番ピンが電源(5V)側につながっているからです。
![]()
スイッチを押すとDigital7番ピンはGndにつながります。
■アップロードと実行テスト
Arduinoのリセットスイッチを押して、その直後にUpload to I/O Boardボタンを押しましょう。(これまでのやり方と同じです。)
スイッチを押すとLEDが消えます。
カウントはSerial Monitorを使って確認できます。
![]()
Arduinoは勝手にチャタリングを防止してくれるみたいなので、チャタリング防止回路をいれなくても大丈夫でした。
チャタリングとは、スイッチを押してOFFからONに以降する非常に短い時間の内に、実は何度かON/OFFが切り替わってしまっているという現象です。このチャタリングを防止する回路は抵抗2つと積層セラミックコンデンサ1個でつくれます。必要な場合はこちらなどを参考にさせてもらうと良いです。
