Usando un controlador Arduino para interrupciones

En este artículo, daré un ejemplo del uso de un controlador arduino para llamar a interrupciones en un programa C #.



Vale la pena señalar que WindowsForms tiene un elemento Timer que se enciende y ejecuta código después de un cierto período de tiempo.







Decidí implementar esto usando el microcontrolador Arduino UNO.



Para hacer esto, programé el controlador para que después de un cierto período de tiempo envíe datos al puerto serie, provocando la interrupción del programa.



Creo que este artículo será de interés para quienes se dedican a la programación de microcontroladores, ya que proporciona un ejemplo de una de las opciones para usar microcontroladores.



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

}


El controlador también acepta comandos para iniciar (1) y detener (2) el temporizador. (Analógico de los métodos de inicio y parada para el temporizador de windowsforms).



Después de recibir el comando de inicio, el controlador espera un intervalo de tiempo después del cual los datos se enviarán al puerto serie.



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 programa de C # abre una conexión a un puerto y ocurre un evento cuando llegan los datos



ard.DataReceived += handler;


llamando al método Serial_interrupt (), que imprime la fecha y hora de la computadora en la consola.



También hay un hilo stop_thread que termina el programa y envía un comando de apagado al controlador cuando se presiona la tecla Esc.



Después de iniciar, el programa esperará a que el usuario ingrese el intervalo de tiempo después del cual el controlador enviará datos, luego, antes de presionar la tecla Esc, el programa mostrará la fecha y la hora en la consola después del intervalo de tiempo especificado.



Gracias a todos por su atención.



All Articles