使用Arduino控制器进行中断

在本文中,我将举一个使用arduino控制器在C#程序中调用中断的示例。



值得注意的是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键之前,程序将在指定的时间间隔后将日期和时间输出到控制台。



谢谢大家的关注。



All Articles