É 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.