我正在开发一个控制台应用程序,它能够通过串口从Arduino读取和写入数据。当我从Arduino读取时,我必须等待它的响应,所以创建一个计时器是更好的选择。
所以我创建了这个Timer,并且每2000毫秒运行一次。
static void Main(string[] args)
{
SerialPort port = new SerialPort("COM1", 9600, Parity.Odd, 7, StopBits.One);
Timer t = new Timer(TimerCallback, null, 0, 2000);
port.DataReceived += Port_DataReceived;
port.Open();
}
private static void TimerCallback(Object o)
{
//Call the method
}
我想要做的是将此方法调用到TimerCallback
private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = sender as SerialPort;
// Leitura de dados
string incoming = port.ReadExisting();
string questionmark = "?";
string carriageReturn = "\r";
string text = string.Empty;
switch (incoming)
{
case "@r\r":
// send the message back
port.Write(questionmark + "*" + carriageReturn);
break;
case "@{/r":
port.Write("@" + text);
break;
default:
Console.WriteLine("Unknown command sent by the Arduino!\n Command: " + incoming);
break;
}
}
我应该如何调用Port_DataReceived方法?
答案 0 :(得分:1)
您想直接从代码中调用事件处理程序似乎很奇怪吗?
建议使用从计时器和事件处理程序调用的新函数。
但是你为什么要这样做对我来说似乎仍然很臭。
答案 1 :(得分:0)
你不需要计时器。删除它。
只要在串行端口上收到数据,就会调用该事件。你不需要自己打电话。