【问题标题】:Lego Mindstorm: Unable to observe operations after connecting to Lego Brick objectLego Mindstorm:连接到 Lego Brick 对象后无法观察操作
【发布时间】:2016-02-20 12:33:21
【问题描述】:

成功连接乐高积木后,我无法观察到任何操作。

此代码有效:

let brick = Brick(BluetoothCommunication "COM3")
let result = brick.ConnectAsync().RunSynchronously

但是,我无法观察到对连续命令(即声音和电机)的任何确认。

客户代码:

open MyLego.Core

[<EntryPoint>]
let main argv = 

    let example = LegoExample()
    0 // return an integer exit code

领域逻辑

namespace MyLego.Core

open Lego.Ev3.Core
open Lego.Ev3.Desktop

type LegoExample() = 

    let volume = 100
    let frequency = 1000
    let duration = 300
    let power = 50
    let breakSetting = false

    let brick = Brick(BluetoothCommunication "COM3")
    do brick.BrickChanged.Add(fun e -> printfn "Brick changed")

    let result = brick.ConnectAsync().RunSynchronously

    let move = brick.DirectCommand.TurnMotorAtPowerForTimeAsync(
                    OutputPort.B ||| OutputPort.C, power, uint32 duration, breakSetting).RunSynchronously

    let playTone = brick.DirectCommand.PlayToneAsync(
                        volume, uint16 frequency, uint16 duration).RunSynchronously

请注意,我在构造函数中执行所有这些操作。可以吗?

我正在参考以下文档:

Video

Windows client

【问题讨论】:

  • 我从来没有使用过 F# 和砖块,所以我不知道这是否是有效的代码,但你看到了吗:Mindstorm API in F# with the lego computation expression.
  • 废话!我真诚地认为我会成为第一个。我现在很沮丧。我能在没有人打败我的情况下成为任何事情的先驱吗?
  • “在构造函数中做所有这些。可以吗?” 从OOD的角度来看:不。构造函数应该主要用于初始化;参见例如Implementation Patterns。但是,既然这是 F# 代码,为什么不将其公开为函数呢?
  • @Mark - 我的问题是在对未观察到的命令问题进行故障排除的背景下。我应该说得更好。
  • @ Mark and Guy Coder - 我计划同时实现这两个版本(即 OOP 和 FP)。但是,我只想使用阻力最小的路径首先启动 Hello World。

标签: f# lego


【解决方案1】:

原来我遇到了蓝牙连接问题。

当我使用 USB 时,我观察到了预期的行为。

显然以下异常被吞没了:

"没有指定登录会话的用户会话密钥"

但是,此异常仅在 C# 实现中观察到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多