Windows10 IoTでスイッチの入力を取ってLED点けたり消したり

Raspberry Piをしばらく触ってなくて、Windows10 IoTも触れてなかったので、ちょっとリハビリも兼ねて。入出力両方を試すため、タクトスイッチを押す度にLEDが点いたり消えたりするのを作ってみる。

実験用の回路を作る

しらべたこと

  • こういうスイッチを押す度に状態を変える回路を組むとき、入力にノイズが乗って綺麗な波形にならず、一度ボタンを押しただけなのに、閾値を2度越えてしまったりすることがある。これをチャタリングといい、対策が必要になる。
  • 入力の波形を矩形波で表したときの上がるときのエッジをポジティブエッジ、逆をネガティブエッジという。

回路図


スイッチの入力とLEDへの出力をそれぞれGPIOポートに繋ぐ設計。

やってみる

ソース

Windows.Device.Gpio名前空間のクラスが割とよきに計らってくれるため、余り悩むこともなく。

  • GpioPinにはValueChangedイベントハンドラがあるので、値が変化したときに拾うことができる。今回のようにスイッチの入力を取るような時に素直に書けるのが嬉しい。
  • ValueChangedイベントは引数でGpioPinValueChangedEventArgsを取る。GpioPinValueChangedEventArgsにはEdgeプロパティがあって、ポジティブエッジやネガティブエッジが取れるので、今回の様なユースケースチャタリングを防ぐために利用できる。
  • GpioPin#WriteにGpioPinValue.HighとかGpioPinValue.Lowを渡すことで、対象のピンをオンオフできる。