学学怎么使用串口接收
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);
//开串口
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();
monitorLogRequests();
//System.Threading.Thread serialThread = new System.Threading.Thread(monitorLogRequests);
// 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);
}
private static void monitorLogRequests()
{
byte[] buffer = new byte[1];
while (true)
{
int count = Uart1.Read(buffer, 0, 1);
if (count > 0)
{
if (buffer[0] == 'D')
{
sendDataList();
}
}
}
}
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.Clear();
UseLog.Add(record);
// sendDataList();
}
System.Threading.Monitor.Exit(switchInterrupt);
}
static void sendDataList()
{
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();
}
}
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;
}
}
}