Utilisation d'un contrôleur Arduino pour les interruptions

Dans cet article, je vais donner un exemple d'utilisation d'un contrôleur arduino pour appeler des interruptions dans un programme C #.



Il convient de noter que WindowsForms a un élément Timer qui s'allume et exécute le code après un certain temps.







J'ai décidé de l'implémenter en utilisant le microcontrôleur Arduino UNO.



Pour ce faire, j'ai programmé le contrôleur de sorte qu'après un certain temps, il envoie des données au port série, provoquant l'interruption du programme.



Je crois que cet article intéressera ceux qui sont engagés dans la programmation de microcontrôleurs, car il fournit un exemple de l'une des options d'utilisation des microcontrôleurs.



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

}


Le contrôleur accepte également les commandes pour démarrer (1) et arrêter (2) la minuterie. (Analogue des méthodes de démarrage et d'arrêt pour la minuterie windowsforms).



Après avoir reçu la commande de démarrage, le contrôleur attend pendant un intervalle de temps après lequel les données seront envoyées au port série.



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


Un programme C # ouvre une connexion à un port et un événement se produit lorsque les données arrivent



ard.DataReceived += handler;


appelant la méthode Serial_interrupt (), qui imprime la date et l'heure de l'ordinateur sur la console.



Il existe également un thread stop_thread qui met fin au programme et envoie une commande d'arrêt au contrôleur lorsque la touche Échap est enfoncée.



Après le démarrage du programme attendra que l'utilisateur entre l'intervalle de temps après lequel le contrôleur enverra des données, puis, avant d'appuyer sur la touche Echap, le programme affichera la date et l'heure sur la console après l'intervalle de temps spécifié.



Merci à tous pour votre attention.



All Articles