You are here

スイッチ

電子工作の出力にLEDがなくてはならないのと同様に、入力にはスイッチが不可欠ですね。ここでは、Arduinoでスイッチを利用する方法を紹介します。

REDUINO-NANO

オリジナルのArduinoとは異なり、REDUINO-NANOには、標準でタクトスイッチが2個基板に実装されており、それぞれArduinoのディジタル8番ピンと9番ピンに接続されています。このため、ブレッドボードなどを用いてスイッチを接続する配線をしなくても、すぐにスイッチを含めたスケッチを始めることが出来ます。

ここではSW2を押すとLEDが点灯するという簡単なスケッチを行ってみます。

このスケッチでは、2点ほど注意することがあります。

  • LEDがアクティブローであること
  • スイッチにプルアップ抵抗が接続されていないこと
  • オリジナルのArduinoの基板上のLEDと異なり、REDUINO-NANOのLEDがアクティブロー(LOWを出力すると点灯する)であることに関する注意点(と言うほどのことでもないのですが :-o)に関しては、こちらを参照してください。

    Arduinoのサイトなどに示されているスイッチを利用するスケッチは、スイッチにプルアップ用の抵抗を配線しており、それを前提にプログラムを記述しているものが多いようです。REDUINO-NANOでは、小さな基板にスイッチなどを含めて実装するために、プルアップ用の抵抗は配線されていませんので少し注意が必要です。

    しかしながら、ATMEGA168のチップ内部には、プルアップ用の抵抗が組み込まれており、そのプルアップ抵抗を有効にすれば、問題なく(設計どおり)スイッチを利用できるようになります。チップ内部のプルアップ抵抗を有効にするためには、該当のピンをpinMode()関数で入力に設定した上で、digitalWrite()関数でHIGHを出力(入力に設定したにもかかわらず)してやります。setup()関数では、そのような処理を行っています。

    プルアップしたスイッチの値を読むと、スイッチを押していないOFFの状態ではHIGHとなり、スイッチが押されONの状態になるとLOW(LEDと同様にアクティブロー)になります。したがって、スイッチの値がLOWのときに、アクティブローであるLEDにLOWを出力すれば、LEDを点灯できることとなります。

    興味のある方は、setup()関数で実施しているプルアップ抵抗の有効化の設定を行わなかったときに何が起きるかを確かめてください。これは、今後皆さんが遭遇するであろうスイッチ入力のバグに関する知見を得るためにも重要だと思います。

    プルアップ抵抗を有効にしなかった場合、私の環境では、LEDが点灯しっぱなし(スイッチが押しっぱなしになったのと同じ)になったのと、スイッチの足の部分を触ると、LEDがちらついたり、一時的に消灯したりという非常に不安定な状態になりました。(一般的に、入力に設定されたピンはハイインピーダンスとなり、プルアップなどの適切な処理をしない限り、外界の変化やノイズに非常に敏感な状態になり、システムの障害の要因となります。)

    REDUINO-GL128

    REDUINO-GL128には、8個ものタクトスイッチが標準搭載されています。少ないピン数でグラフィックLCDの制御や多くのスイッチを利用できるようにするために、REDUINO-GL128のスイッチ回路は少し複雑なものとなっています。

    開発ソフト: 
    チップファミリー: 
    MCUチップ: 
    技術: