Usando um controlador Arduino para interrupções

Neste artigo, darei um exemplo de como usar um controlador Arduino para chamar interrupções em um programa C #.



É importante notar que WindowsForms tem um elemento Timer que ativa e executa o código após um determinado período de tempo.







Decidi implementar isso usando o microcontrolador Arduino UNO.



Para isso, programei o controlador de forma que após um determinado período de tempo ele envie dados para a porta serial, fazendo com que o programa seja interrompido.



Acredito que este artigo seja do interesse de quem se dedica à programação de microcontroladores, pois é um exemplo de uma das opções de uso de 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;
  }

}


O controlador também aceita comandos para iniciar (1) e parar (2) o cronômetro. (Analógico dos métodos de início e parada para temporizador do windowsforms).



Após receber o comando de partida, o controlador aguarda um intervalo de tempo após o qual os dados serão enviados para a porta serial.



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


Um programa C # abre uma conexão a uma porta e um evento ocorre quando os dados chegam



ard.DataReceived += handler;


chamando o método Serial_interrupt (), que imprime a data e hora do computador no console.



Também há um thread stop_thread que termina o programa e envia um comando de desligamento ao controlador quando a tecla Esc é pressionada.



Depois de iniciar, o programa irá esperar que o usuário insira o intervalo de tempo após o qual o controlador enviará os dados, então, antes de pressionar a tecla Esc, o programa irá enviar a data e hora para o console após o intervalo de tempo especificado.



Obrigado a todos pela atenção.



All Articles