前回は、LEDが自動的にチカチカするだけでしたが、ボタンを押したら、LEDが光るようにします。
ちょうど初音さんも同様の記事を書いているので、ちょっと違う方法で…
netduino公式ページの、projectsというページの一番最後に、光らせ方のビデオがあるので、こちらを参考にします。
ただし、解説は、古い netoduino 1 で行っているので、少々Pinの指定や値が違ったりするようです。
ちなみに、btn.OnInterrupt まで記入したところで、Tabキーを2回押すと、イベントハンドラが自動的に作成されます。
VisualStudio が使えて幸せなところですね。(^^)/ まるで、WPFやWindowsFormで、button1.Click += button1_Click;
とやっているかのように、同じ感覚でボタンクリックの処理が書けます。
InterruptPort変数を作るときに、 Port.InterruptMode.InterruptEdgeBoth を指定すると、
ボタンを押したとき、および離したタイミングの2回、イベントハンドラが呼ばれるようになるようです。
そのとき、data2 に、1(ON)または0(OFF)の情報が渡ってきますので、これをtrueとfalseに変換してセットしてあげます。
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace NetduinoApplication2
{
public class Program
{
static OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
public static void Main()
{
// 立ち上がりと立ち下がりの両方を検知するように設定
var btn = new InterruptPort(Pins.ONBOARD_BTN, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeBoth);
// +=まで入力して、TABキーを押すと、ハンドラーを自動で生成できます
btn.OnInterrupt += btn_OnInterrupt;
// これがないと、すぐに終了してしまう
Thread.Sleep(Timeout.Infinite);
}
static void btn_OnInterrupt(uint data1, uint data2, DateTime time)
{
// 1または0が渡ってくるので、trueまたはfalseに変換して設定
led.Write(data2 != 0);
}
}
}
投稿日時 : 2015年4月5日 17:40