استخدام وحدة تحكم Arduino للمقاطعات

في هذه المقالة سأقدم مثالاً على استخدام وحدة تحكم اردوينو لاستدعاء المقاطعات في برنامج C #.



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



شكرا لكم جميعا على اهتمامكم.



All Articles