使用队列存储
为了省事我发送完直接从队列里面删除了
被屏蔽掉的部分是使用数组而不是队列,可以试试用用
串口用的COM1
using System;
using System.IO;using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Collections;
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.P0_4,false);
static InterruptPort switchInterrupt = new InterruptPort(
(Cpu.Pin)GHI.Hardware.G120.Pin.P2_10,
false,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeBoth);
// static private FlashlightUse[] FlashlightUseLog;
static DateTime switchedOn;
private static ArrayList UseLog = new ArrayList();
static SerialPort Uart1 = new SerialPort("COM1", 115200);
public static void Main()
{
// 开按键中断
switchInterrupt.OnInterrupt += new NativeEventHandler(switchInterrupt_OnInterrupt);
//开定时器
System.Threading.Timer timer = new System.Threading.Timer(
new TimerCallback(flashTick),
null,
5000,
5000);
//FlashlightUseLog = new FlashlightUse[1000];
//FlashlightUseLog[0]=new FlashlightUse(switchedOn,DateTime.Now);
//开串口
Uart1.Open();
// create a string
string counter_string = "Hello micro framework\r\n";
// convert the string to bytes
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(counter_string);
// send the bytes on the serial port
Uart1.Write(buffer, 0, buffer.Length);
Uart1.Flush();
//for (int i = 0; i < UseLog.Count; i++)
//{
// continue;
// if (UseLog[i] == null)
// {
// continue;
// }
// Debug.Print(FlashlightUseLog[i].ToString());
//}
//for (int i = 0; i < UseLog.Count; i++)
//{
// if (UseLog[i] == null)
// {
// continue;
// }
// if (UseLog[i] is FlashlightUse)
// {
// FlashlightUse use = (FlashlightUse)UseLog[i];
// Debug.Print(use.switchedOn.ToString());
// }
//}
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
}
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 bool storeUseRecord(FlashlightUse useLog)
//{
// for (int i = 0; i < FlashlightUseLog.Length; i++)
// {
// if ( FlashlightUseLog[i] == null)
// {
// FlashlightUseLog[i] = useLog;
// return true;
// }
// }
// return false;
//}
private static void flashTick(object o)
{
if (!switchInterrupt.Read())
{
return;
}
lampOutport.Write(true);
switchedOn = DateTime.Now;
System.Threading.Thread.Sleep(100);
System.Threading.Monitor.Enter(switchInterrupt);
if (switchInterrupt.Read())
{
lampOutport.Write(false);
FlashlightUse record = new FlashlightUse(switchedOn, DateTime.Now);
UseLog.Add(record);
datalist();
UseLog.Remove(record);
}
System.Threading.Monitor.Exit(switchInterrupt);
}
static void datalist()
{
foreach (FlashlightUse logItem in UseLog)
{
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(logItem.ToString());
Uart1.Write(buffer, 0, buffer.Length);
byte[] buffer1 = System.Text.Encoding.UTF8.GetBytes("\r\n");
Uart1.Write(buffer1, 0, buffer1.Length);
}
Uart1.Flush();
}
//static void dumpLog()
//{
// for (int i = 0; i < FlashlightUseLog.Length; i++)
// {
// if (FlashlightUseLog[i] == null)
// {
// continue;
// }
// Debug.Print(FlashlightUseLog[i].ToString());
// }
//}
}
public class FlashlightUse
{
public DateTime switchedOn; // 点亮时间
public TimeSpan litDuration; // 持续时间
public override string ToString()
{
return "On : " + switchedOn.ToString() + " for : " + litDuration.ToString();
}
public FlashlightUse(DateTime inSwitchedOn, DateTime inSwithedOff)
{
switchedOn = inSwitchedOn;
litDuration = inSwithedOff.Subtract(switchedOn);
}
public FlashlightUse(DateTime inSwitchedOn, TimeSpan inLitDuration)
{
if (inLitDuration.Ticks < 0)
{
throw new Exception("Invalid FlashlightUse timespan");
}
switchedOn = inSwitchedOn;
litDuration = inLitDuration;
}
}
}