WindowsFormsには、一定の時間が経過するとオンになってコードを実行するTimer要素があることに注意してください。
ArduinoUNOマイクロコントローラーを使用してこれを実装することにしました。
これを行うために、一定時間後にシリアルポートにデータを送信してプログラムを中断するようにコントローラーをプログラムしました。
この記事は、マイクロコンピューターを使用するためのオプションの1つの例を提供するため、マイクロコンピューターのプログラミングに携わっている人にとって興味深いものになると思います。
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タイマーのstartメソッドとstopメソッドのアナログ)。
開始コマンドを受信した後、コントローラーは一定時間待機してから、データがシリアルポートに送信されます。
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()メソッドを呼び出します。このメソッドは、コンピューターの日付と時刻をコンソールに出力します。
Escキーが押されたときにプログラムを終了し、シャットダウンコマンドをコントローラーに送信するstop_threadスレッドもあります。
プログラムの開始後、ユーザーが時間間隔を入力するのを待ってから、コントローラーがデータを送信します。その後、Escキーを押す前に、プログラムは指定された時間間隔の後にコンソールに日付と時刻を表示します。
ご清聴ありがとうございました。