Verwendung eines Arduino-Controllers für Interrupts

In diesem Artikel werde ich ein Beispiel für die Verwendung eines Arduino-Controllers zum Aufrufen von Interrupts in einem C # -Programm geben.



Es ist erwähnenswert, dass WindowsForms über ein Timer-Element verfügt, das den Code nach einer bestimmten Zeit aktiviert und ausführt.







Ich entschied mich, dies mit dem Arduino UNO-Mikrocontroller zu implementieren.



Zu diesem Zweck habe ich den Controller so programmiert, dass er nach einer bestimmten Zeit Daten an die serielle Schnittstelle sendet, wodurch das Programm unterbrochen wird.



Ich glaube, dass dieser Artikel für diejenigen von Interesse sein wird, die sich mit der Programmierung von Mikrocontrollern befassen, da er ein Beispiel für eine der Optionen für die Verwendung von Mikrocontrollern darstellt.



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;
  }

}


Die Steuerung akzeptiert auch Befehle zum Starten (1) und Stoppen (2) des Timers. (Analog zu den Start- und Stoppmethoden für den Windowsforms-Timer).



Nach dem Empfang des Startbefehls wartet die Steuerung auf ein Zeitintervall, nach dem die Daten an die serielle Schnittstelle gesendet werden.



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);
        }
      
    }
}


Ein C # -Programm stellt eine Verbindung zu einem Port her und ein Ereignis tritt auf, wenn Daten eintreffen



ard.DataReceived += handler;


Aufrufen der Serial_interrupt () -Methode, mit der Datum und Uhrzeit des Computers auf der Konsole gedruckt werden.



Es gibt auch einen stop_thread-Thread, der das Programm beendet und einen Befehl zum Herunterfahren an die Steuerung sendet, wenn die Esc-Taste gedrückt wird.



Nach dem Starten des Programms wartet der Benutzer auf die Eingabe des Zeitintervalls, nach dem der Controller Daten sendet. Vor dem Drücken der Esc-Taste gibt das Programm Datum und Uhrzeit nach dem angegebenen Zeitintervall an die Konsole aus.



Vielen Dank für Ihre Aufmerksamkeit.



All Articles