تجدر الإشارة إلى أن WindowsForms يحتوي على عنصر مؤقت يتم تشغيله وتنفيذه بعد فترة زمنية معينة.
قررت تنفيذ ذلك باستخدام متحكم 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 ، سيعرض البرنامج التاريخ والوقت في وحدة التحكم بعد الفاصل الزمني المحدد.
شكرا لكم جميعا على اهتمامكم.