值得注意的是WindowsForms具有一个Timer元素,该元素在一定时间后会打开并执行代码。
我决定使用Arduino UNO微控制器实现这一点。
为此,我对控制器进行了编程,以使其在一定时间后将数据发送到串行端口,从而导致程序中断。
我相信本文将对从事微控制器编程的人们感兴趣,因为它提供了使用微控制器的一种选择示例。
void setup(){
Serial.begin(9600);//
}
int str=0;
int interval=0;
String text;
void loop()
{
while(str==0)
str=Serial.parseInt();//
if (str==1)//
{
while(interval==0)
interval=Serial.parseInt();//
text=String(interval);
text+="!";
while(str!=2){
delay(interval);//
Serial.println(text);//
str=Serial.parseInt();//
}
interval=0;
}
}
控制器还接受命令以启动(1)和停止(2)计时器。(Windowsforms计时器的启动和停止方法的模拟)。
收到启动命令后,控制器将等待一个时间间隔,在该时间间隔之后,数据将被发送到串行端口。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.IO.Ports;
using System.IO;
using System.Net;
namespace ConsoleApp33
{
class Program
{
private static SerialPort ard = new SerialPort("COM13", 9600);// .
private static Thread stop_thread = new Thread(Stop);
private static bool sost = true;
[MTAThread]
static void Main(string[] args)
{
SerialDataReceivedEventHandler handler = new SerialDataReceivedEventHandler(Serial_interrupt);//
ard.DataReceived += handler;
//
int interval = int.Parse(Console.ReadLine());
//
while (ard.IsOpen != true)
ard.Open();
//
ard.WriteLine("1");
Thread.Sleep(10);
ard.WriteLine(interval.ToString());
Console.WriteLine(ard.ReadLine());
//
stop_thread.IsBackground = true;
stop_thread.Start();
while (sost) Thread.Sleep(1);//
}
public enum Comand
{
Start = 1,//
Stop = 2 //
}
private static System.DateTime dateTime;
public static void Serial_interrupt(object sender,SerialDataReceivedEventArgs e)
{
//
dateTime = DateTime.Now;
Console.WriteLine(dateTime.ToString());
}
public static void Stop()
{
if ((int)Console.ReadKey().Key == 27)// Esc
{
ard.WriteLine(Comand.Stop.ToString());//
sost = false;// Main
}
Thread.Sleep(10);
}
}
}
C#程序打开与端口的连接,并且在数据到达时发生事件
ard.DataReceived += handler;
调用Serial_interrupt()方法,该方法将计算机的日期和时间打印到控制台。
还有一个stop_thread线程可终止程序,并在按下Esc键时将关闭命令发送到控制器。
启动后,程序将等待用户输入控制器发送数据的时间间隔,然后,在按Esc键之前,程序将在指定的时间间隔后将日期和时间输出到控制台。
谢谢大家的关注。