.net micro framework的入门例程-点灯神话-7.队列存储LED灯闪烁时间并用串口发送

使用队列存储

为了省事我发送完直接从队列里面删除了

被屏蔽掉的部分是使用数组而不是队列,可以试试用用

串口用的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;
        }    
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值