【问题标题】:How to log the particular variable data which comes randomly at serial com port in C# from Arduino如何从Arduino记录在C#中串行com端口随机出现的特定变量数据
【发布时间】:2020-08-12 05:07:03
【问题描述】:

我正在做一个项目,我在其中设置了 Arduino 和 C# 窗口窗体应用程序之间的串行通信。当我向 Arduino 发送启动命令时,Arduino 开始旋转连接到它的伺服电机,并将角度位置以连续方式发送到 c#。

现在,当 Arduino 将数据发送到 C# 时,我在同一串行端口上随机请求存储在 Arduino 中的可变数据,我想在我的 c# 中记录该可变数据。我可以记录正在接收的任何数据在串行端口上,但我无法选择和提取该特定变量。

谁能帮帮我?

【问题讨论】:

  • 您需要一个应用层来发送/接收两种类型的消息并在每条消息上放置一个标头,以便接收端知道正在接收的消息类型。
  • 谢谢!你能给我一个示例代码或任何参考链接来实现吗?我是新手,所以不知道如何实现。
  • 大多数 Arduino 串行教程都涵盖了这一点。您需要发送标准化的消息。简单的例子:发送“on”打开电机,发送“off”关闭它,发送“?”让Arduino发送值。检查收到的消息,一旦您识别出命令,请执行某些操作。您可以为错误的命令、校验和、终止符添加错误……谷歌串行协议和 ASCII 命令接口。你会发现很多例子

标签: c# arduino


【解决方案1】:

我将把它放在这里。从 jdweng 停止的地方开始,您的消息还需要包含消息传递协议状态信息。包含此信息后,您将能够以任何顺序对任何消息进行反序列化,因为处理它所需的信息包含在消息中。

这是一个示例协议。

留言 -

  • 消息长度 - 2 个字节
  • MessageType - 2 个字节
  • MessageBody - n 字节

所以你的角度信息将由长度、类型和值三部分组成

角度消息

  • 消息长度 = 6
  • MessageType = (Int16)MessageTypes.Angle
  • MessageBody = (Int16)0-359

参数消息

  • MessageLength = 10 + 值大小
  • MessageType = (Int16)MessageTypes.Parameter
  • MessageBody = {

    • (Int16)ParameterOperation.Updated,
    • (Int16)ParameterNumber,
    • (Int16)参数类型,
    • (Byte[])ParameterValue

    }

    使用此方案,您的消息包含处理它所需的所有信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2016-04-25
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2017-02-19
    相关资源
    最近更新 更多