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