【问题标题】:Programming a timer counter in C#在 C# 中编写定时器计数器
【发布时间】:2020-07-30 07:52:44
【问题描述】:

我正在开发一个 C# 应用程序,它应该从 Neurofeedback 软件接收数据并将其传输到 Lego NXT 积木。每次在 Neurofeedback 软件内部达到某个目标时,该软件都会通过 TCP 套接字向 C# 应用程序传输值 1,如果未达到目标,则向 C# 发送 0。然后,C#应用程序将信息发送到我的NXT汽车(使用蓝牙通信):如果NXT收到1,它应该移动;如果它收到 0,那么它应该立即停止。

由于有时这些值会在很短的时间内发生变化,因此 NXT 无法快速准确地做出响应(通过移动或停止移动)。例如:当它从 1 变为 0 再变为 1 时,如果 1 之间的区间周期太短,则会给人以 NXT 一直在移动的印象。

为了解决这个问题,一个解决方案是编写一个“计时器”:基本上,为了让 NXT 移动,那么目标(在 Neurofeedback 软件内部)应该遵守至少 1 秒(也就是说,没有中断 - 值从 1 变为 0)。换句话说,如果 C# 应用程序接收到值 1 并且至少 1 秒(或更长时间)没有改变,那么它应该命令 NXT 最终移动(并在 C# 没有接收到 0 值时继续移动)。

我知道 Windows 窗体上有一个计时器功能,但我无法从中编写一个“计数器”。此外,我也尝试进行一些研究,但我开始相信“计时器”可能不是描述我正在寻找的内容的最佳方式......

注意:我的 NXT 积木中没有代码。基本上,C# 应用程序(通过特定的库)将所有的运动命令传输到 NXT 机器人。

【问题讨论】:

  • but I couldn't manage to program a "counter" from it 请解释一下您的意思。或者显示try的代码。

标签: c# sockets timer bluetooth nxt


【解决方案1】:

你保留最后N个命令怎么样,看看Y的范围内有没有0,有没有停止运动?

换句话说,假设向前移动作为默认状态,并跟踪您在最后 N 个命令中获得了多少停止 (0)。如果它超过了一个阈值(您将定义),它就会停止,并且只有在收到另一组 N 1 个命令时才会重新开始。

时间可能不是你需要的维度,但如果你这样做了,你可能会应用我在计时器中描述的相同逻辑。

保留您收到的所有最后 N 个命令,并使其默认前进。然后,创建一个计时器,并在每个滴答声中检查您收到的命令并决定是否必须继续移动或停止。

【讨论】:

    【解决方案2】:

    保持时间变量。每次发送 0 时,将其值设置为当前时间。

    程序开始 - 时间变量设置为当前时间

    每次收到零时,将时间变量设置为当前时间。向 NXT 机器人发送停止移动。

    每次收到一个时,检查当前时间和时间变量之间的时间差是否大于 1 秒。如果是这样,则发送命令以移动到 NXT 机器人。

    我建议在应用程序中设置一个可以更改的值,以便调整时间。

    如果机器人正在移动,请保留一个变量,那么您只需在机器人应该在移动和不移动之间切换时发送停止和开始移动。

    您使用的是什么神经反馈设备?

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 2011-03-31
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      相关资源
      最近更新 更多