向WinForm应用程序

时间:2016-09-24 18:13:16

标签: winforms arduino delay

我正在使用WinForm应用程序与微处理器(Arduino Micro)进行通信。调用'serialPort1.Open();'后,MCU的串口需要几秒钟才能使用。因此,在尝试从串行端口读取之前,我需要添加某种延迟,大约2或3秒。此外,我正在向MCU发送和接收命令,在此期间我还需要在串行写入和读取之间延迟100ms。

我尝试过使用Thread.Sleep(当然会锁定表单)和各种计时器方法,但没有运气。我经常使用这种延迟,所以我希望有一个看起来像这样的方法:

我的表单中的任何地方:invokeTimer(2000); //以ms为单位调用延迟方法

private void invokeDelay(int time)
{
    // delay here and do nothing for specified time in milliseconds
}

简单示例:

serialPort1.Open(); // connect to MCU
invokeDelay(3000);  // give MCU time to make serial stream available

// serial stream should now be available so ...

serialPort1.WriteLine("?");  // ask MCU to provide a response
invokeDelay(100);   // 10-100ms depending on baud rate of MCU to respond
string response = serialPort1.ReadLine();

或者,我会很高兴检查是否有可用的串行数据,这样可以避免延迟/计时器。在Arduino IDE中有一个Serial.Available()函数,但我在Visual Studio中看不到任何类似的东西。否则我会坐在一个while循环中,直到串行流可用。

任何建议都会非常感激!

0 个答案:

没有答案