3

背景:

我的大学任务是为 Arduino UNO 实现电梯的源代码,该代码带有一个用户界面屏蔽,其中包含:一个 7 段显示器和总共 8 个按钮,每个楼层一个,外加两个用于控制门。楼层按钮也有一个 LED。

硬件仅用于人类用户输入,但大脑完全在 Erlang 中完成。在我们用硬件实现这个项目之前,我们使用了一个使用 wxWidgets 的模拟来显示以下 UI:一个显示电梯门的窗口,每层有 6 个窗口,以及一个用于电梯内部按钮阵列的窗口。这个按钮数组是我试图在 Arduino 中实现的。

一些代码:

我们的老师给了我们一些关于 erlang:open_port/2 使用的令人困惑的笔记,我还无法理解。我们使用的测试代码如下:

-module(proUSB).
-export([start/1, order/2, loop/1, exit/2]).

start(Port_alias) ->
    Port = open_port(Port_alias, []),
    Pid = spawn(proUSB, loop, [Port]),
    port_connect(Port, Pid),
    {Port,Pid}.


order(Port,Value) ->
    port_command(Port,Value).

loop(P) ->
    receive
        {P,{data,A}} ->
            io:format("Received: ~p~n", [A]),
            loop(P);
        {'EXIT',P,_Reason} ->
            port_close(P),
            io:format("Unexpected finalization~n",[]);
        exit ->
            io:format("Proces finalization~n",[]);
        Other -> io:format("Fi ~p~n",[Other])
    end.

exit(Pid, Port) ->
    port_close(Port),
    Pid!exit.

正如我已经理解并使用上面提到的代码在 Windows Subsystem for Linux (WSL) 中成功测试的那样,我必须在 Erlang shell 中执行的是

> {Port, Pid} = proUSB:start("/dev/ttyS6").
{#Port<0.7>,<0.82.0>}

这将打开端口。我现在可以按照我们设计的协议向 Arduino USART 发送订单。为了点亮 7 段显示器中的数字 3,我们写

> proUSB:order(Port,"D3").
true

现在,如果我们按下楼层按钮 1,您可以在终端中看到

Received: "B1\n"
Received: "\n"
Received: "B1\n"
Received: "\n"

我的问题:

如果我想使用 Windows Powershell 与串口进行相同的连接,我的老师告诉我们写"COM6"而不是"/dev/ttyS6",但是我已经测试过,我无法连接但我得到了这个错误

> {Port, Pid} = proUSB:start("COM6").
** exception exit: einval
>

我错过了什么?如果 WSL 适用于"/dev/ttyS6",为什么当我可以将串行端口与“RealTerm:串行捕获程序”一起使用时,它不能与 Windows 一起使用?

4

0 回答 0