我需要在C#中编写代码,每隔2秒就会将数据从Serial发送到Arduino。
这就是我试图做的事情:
Thread sender = new Thread(voidSender);
public static void voidSender() {
serialArduino.WriteLine("Test");
Thread.Sleep(2000);
}
答案 0 :(得分:0)
在您的示例中,您将启动一个运行已定义方法的线程,并发送一条消息。要多次发送消息,您需要为此方法添加循环,如
public void voidSender()
{
//Send forever
while(true)
{
serialArduino.WriteLine("Test");
Thread.Sleep(2000);
}
}
但是,通常通过使用计时器来定期执行事件。只需初始化像
这样的计时器System.Timers.Timer sendMessageTimer = new System.Timers.Timer(2000);
sendMessageTimer.Elapsed += OnSend;
sendMessageTimer.AutoReset = true;
sendMessageTimer.Enabled = true;
在经过处理的处理程序中,您可以发送消息,如
private void OnSend(Object source, ElapsedEventArgs e)
{
serialArduino.WriteLine("Test");
}
答案 1 :(得分:-2)
老实说,我不知道你为什么要将Arduino这样的开源平台与C#.net混合使用,如果它没有运行在核心上,但是你的关注不是我的,我个人不会这样做这一点。
如果你想每两秒发送一次命令,我会建议你使用集成在每个windows系统中的windows调度程序,但是你可以很容易地自己实现一个时钟,为什么还需要当普通用户几乎注意到时,将2秒钟的重负荷放在这个时间框架上。如果你不想使用基于时钟的系统,你可以使用这个修改过的例子,但它可能会在递归后的某个时候抛出stackoverflow异常,如果你计划从长远来看,你必须远离它们。
//First sorry for reusing your code but I am writing from my smartphone and
//I am kind of lazy here is quick modification that would work but not the most clever way around
Thread sender = new Thread(voidSender);
public static void voidSender()
{
start:
serialArduino.WriteLine("Test");
Thread.Sleep(2000);
goto start;
}