将主函数中闪烁程序移动至新线程
并加入保护机制,防止误动作
using System;
using System.Threading;using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using GHIElectronics.Gadgeteer;
namespace my_LED
{
public class my_led
{
static OutputPort lampOutport = new OutputPort((Cpu.Pin)GHI.Hardware.G120.Pin.P1_15,false);
static InterruptPort switchInterrupt = new InterruptPort(
(Cpu.Pin)GHI.Hardware.G120.Pin.P2_10,
false,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeBoth);
public static void Main()
{
switchInterrupt.OnInterrupt += new NativeEventHandler(switchInterrupt_OnInterrupt);
System.Threading.Thread finderThread = new Thread(finderFlash);
finderThread.Start();
}
static void switchInterrupt_OnInterrupt(uint data1, uint data2, DateTime time)
{
Monitor.Enter(switchInterrupt);
switch (data2)
{
case 0: lampOutport.Write(true); break;
case 1: lampOutport.Write(false); break;
default: break;
}
Monitor.Exit(switchInterrupt);
//throw new NotImplementedException();
}
private static void finderFlash()
{
while (true)
{
//System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
System.Threading.Thread.Sleep(5000);
System.Threading.Monitor.Enter(switchInterrupt);
if (!switchInterrupt.Read())
{
continue;
}
System.Threading.Monitor.Exit(switchInterrupt);
lampOutport.Write(true);
System.Threading.Thread.Sleep(100);
if (switchInterrupt.Read())
{
lampOutport.Write(false);
}
}
}
}
}