2012年2月2日木曜日

スイッチを使ってみる

スイッチのON/OFFを検出して、LEDを点けたり消したりしてみます。

いつものごとく、まずは回路図から。



スイッチ(ポチッと押すスイッチをタクトスイッチいうことを初めて知りました)と、 LED、抵抗10kΩを図のように接続。

タクトスイッチの+側をArduinoの5Vへ、-側は抵抗を通ってArduinoのGNDと、途中で分岐させてArduinoの12番ピンへ接続です。
LEDの+側は13番へ接続です。-側はGNDへ接続することも忘れずに。電気はぐるっと流れることを学びました。LEDに抵抗をつなぐ理由も、もう分かっています。

タクトスイッチに接続している抵抗は、プルダウン抵抗と呼びます。タクトスイッチを押すと5Vが流れますが、タクトスイッチを離した時、素人的には電気は流れないので0Vだと思うのですが・・・。
実際には、12番ピンはどこにも接続されていない状態になり、不安定な電圧になるとのこと。
ふ~んと、思いながら、きちんとGNDにつないで0Vにするものだそうです。
電気っぽいので、きちんと理解しました。たぶん・・・。

ここまで、準備ができたら、次はスケッチです。

void setup(){
  //12番ピンをデジタル入力に設定
  pinMode(12,INPUT);
  //13番ピンをデジタル出力に設定
  pinMode(13,OUTPUT);
}

void loop(){
 //デジタル入力(12番ピン)がHIGH(5V)なら
  if(digitalRead(12)==HIGH){
    //13番ピンをHIGH(5V)で出力
    digitalWrite(13,HIGH);
  }else{       //デジタル入力がLOW(0V)なら
    //13番ピンをLOW(0V)で出力
    digitalWrite(13,LOW);
  }
}


いつもどおり、Arduinoの電源Onの時に実行される命令をvoid setup( )の塊のなかに、pinMode命令を使って、12番ピンは入力、13番ピンは出力であることを宣言します。
ちゃんと知っています。

次に、 void loop( )のなかに、タクトスイッチのON/OFFの読み取りとLEDの制御の命令を書きます。
digitalRead(12)は、12番ピンをデジタル形式で読みとる意味です。
if( A ){ B } else { C } は、他のスクリプト言語にもある、条件文であることは、すぐにわかりました(自慢するほどのことではないかも・・・)。

条件Aが正ならば、Bの命令を実行する、条件Aが否ならば、Cの命令を実行するです。

つまり、digitalRead(12)命令で12番ピンの電圧(この場合は5V)を読み取り、HIGH(5V)ならばdigitalWrite(13,HIGH)命令で、13番ピンに電気を流し、LOW(0V)ならばdigitalWrite(13,LOW)命令で、13番ピンに電気を流さない。ということを何度もグルグル繰り返しチェックしていることになります。

実際に、ArduinoへスケッチをUploadすると、ポチッと押すとLEDが光り、手を離すと消えました。ポチポチ押したり離したりしても、きちんと反応しました。大成功。

なんて、扱いやすいんだろう。感動です。

今日はここまで。
ランキングに参加しています。ぼちっとお願います→

0 件のコメント:

コメントを投稿