`
hideto
  • 浏览: 2678839 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gen_fsm例子:code_lock

阅读更多
改了一下代码,可以run了:
%% code_lock.erl
-module(code_lock).
-behaviour(gen_fsm).

-export([start/1, button/1]).
-export([locked/2, open/2]).
-export([init/1, handle_event/3, handle_sync_event/4, handle_info/3, code_change/4, terminate/3]). 

start(Code) ->
  gen_fsm:start_link({local, code_lock}, code_lock, Code, []).

button(Digit) ->
  gen_fsm:send_event(code_lock, {button, Digit}).

locked({button, Digit}, {SoFar, Code}) ->
  io:format("Now the code you input is: ~w~n", [SoFar ++ [Digit]]),
  case SoFar ++ [Digit] of
    Code ->
      io:format("Open!~n"),
      {next_state, open, {[], Code}, 3000};
    Incomplete when length(Incomplete) < length(Code) ->
      {next_state, locked, {Incomplete, Code}};
    _Wrong ->
      io:format("Wrong Code! Start Again!~n"),
      {next_state, locked, {[], Code}}
  end.

open(timeout, State) ->
  io:format("Lock!~n"),
  {next_state, locked, State}.

init(Code) ->
  {ok, locked, {[], Code}}.

handle_event(_A, _B, _C) ->
  {next_state, ok, ok}.

handle_sync_event(_A, _B, _C, _D) ->
  {reply, ok, ok, ok}.

handle_info(_A, _B, _C) ->
  {next_state, ok, ok}.

code_change(_A, _B, _C, _D) ->
  {ok, ok, ok}.

terminate(_A, _B, _C) ->
  ok.


编译运行:
D:\erl\code>erl
Eshell V5.6.3  (abort with ^G)
1> c(code_lock).
{ok,code_lock}
2> code_lock:start([1,2,3]).
{ok,<0.36.0>}
3> code_lock:button(1).
Now the code you input is: [1]
ok
4> code_lock:button(2).
Now the code you input is: [1,2]
ok
5> code_lock:button(3).
Now the code you input is: [1,2,3]
ok
Open!
6> Lock!
6> code_lock:button(1).
Now the code you input is: [1]
ok
7> code_lock:button(2).
Now the code you input is: [1,2]
ok
8> code_lock:button(2).
Now the code you input is: [1,2,2]
ok
Wrong Code! Start Again!
9>
分享到:
评论
1 楼 zzh616 2011-03-22  
不错 可以运行

相关推荐

    AXI_Master_FSM.rar_AXI_AXI implement_AXI master_AXI_Master_FSM_a

    在本压缩包文件"AXI_Master_FSM.rar"中,重点是实现了一个基于状态机(Finite State Machine, FSM)的AXI主设备(AXI Master)。 AXI主设备是AXI协议中的一个关键组件,它负责发起数据传输请求,控制读写操作,并...

    fsm.rar_FSM_FSM code in vhdl_FSM vhdl

    有限状态机(Finite State Machine, FSM)是一种在数字系统设计中广泛应用的概念,特别是在VHDL(Very High Speed Integrated Circuit Hardware Description Language)编程中。VHDL是一种用于电子设计自动化(EDA)...

    fsm.zip_FSM实例_fsa_fsm例子

    **有限状态机(Finite State Machine, FSM)**是一种数学模型,用于描述系统或程序在不同状态之间转换的行为。在计算机科学、软件工程以及自动化控制等领域,FSM有着广泛的应用。这个压缩包`fsm.zip`包含了关于FSM的...

    视频中工程代码 class8_FSM

    视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM...

    otg_fsm.rar_FSM_otg

    `otg_fsm.rar_FSM_otg`这个标题暗示了我们讨论的是关于ChipIdea USB IP核心中的OTG FSM驱动程序。 `otg_fsm.c`文件很可能是实现这个驱动的核心代码,它包含了FSM的定义、状态转换逻辑以及与OTG相关的操作处理。在...

    erlang OTP Design Principles之Gen中文

    在示例中,`gen_fsm:start_link/4`被调用,创建了一个新的Erlang进程,它是一个Gen_Fsm。第一个参数`{local, code_lock}`指定了本地注册的名字,使得Gen_Fsm可以通过`code_lock`这个名字访问。如果省略名字,进程将...

    Stepper_motor_fsm.rar_FSM_FSM vhdl_it_stepper motor

    标题中的“Stepper_motor_fsm.rar_FSM_FSM vhdl_it_stepper motor”表明这是一个关于步进电机(stepper motor)的文件,其中包含了状态机(Finite State Machine, FSM)的设计,设计语言为VHDL,这通常用于数字逻辑...

    fsm_hello_fsm_hello_FSM_

    标题中的"fsm_hello_fsm_hello_FSM_"似乎是一个与有限状态机(Finite State Machine,FSM)相关的项目或文件命名约定,其中"hello"可能代表一个示例或特定的模块,而"FSM"是有限状态机的缩写。在描述中,我们只有一...

    textsearch_fsm.rar_FSM

    标题中的"**textsearch_fsm.rar_FSM**"表明这是一个与文本搜索相关的有限状态机(Finite State Machine, FSM)项目,而文件"**ts_fsm_token**"则是该机器中用于处理状态转换的关键组件,称为“状态机令牌”。...

    or-c1_fsm_cn_final_060112.pdf

    ### OR-C1机型维修手册知识点总结 #### 一、安全注意事项 **1.1 防止人身伤害** - 在拆卸或组装机器及其配件前,必须先切断电源。 - 插座需位于机器附近且方便操作。 - 即使主电源关闭,机器和纸盘的某些部分也...

    FSM.rar_FSM_FSM MATLAB

    标题中的"FSM.rar_FSM_FSM MATLAB"表明这是一个与MATLAB相关的文件,重点在于"FSM",它可能是“Focal Spot Measurement”的缩写,因为描述中提到了"Measurement of focal spot size using knife edge method",这...

    fsm.rar_ FSM verilog_FSM_fsm二段式_状态机_状态机写法

    状态机(Finite State Machine, FSM)是数字系统设计中的核心概念,特别是在Verilog这样的硬件描述语言中,状态机被广泛用于实现控制逻辑。本资源"FSM.rar"提供了一种详细的学习材料,专注于不同类型的Verilog状态机...

    FSM.rar_FSM code for verilog_moore fsm verilog_moore fsm 代码

    状态机(Finite State Machine, FSM)是数字系统设计中的一个重要概念,它被广泛应用于各种硬件描述语言,如Verilog。Moore型状态机是一种特殊类型的状态机,其输出仅依赖于当前状态,而不受输入的影响。在Verilog中...

    PyPI 官网下载 | gevent_fsm-0.2.0.tar.gz

    《PyPI官网下载 | gevent_fsm-0.2.0.tar.gz:深入解析Python异步编程与状态机库》 在Python的世界里,高效的并发处理是开发者常常面临的一个挑战。为了解决这个问题,Python社区提供了丰富的库,其中就包括了`...

    基于Erlang的gen_tcp聊天室代码,功能完整

    - 处理连接请求,为每个新连接创建一个新的进程(通常是一个gen_server或gen_fsm行为)。 - 注册和登录逻辑,处理用户认证请求。 - 监听和转发消息,确保消息在正确用户间传递。 - 错误处理和异常恢复,确保系统的...

    FSM.rar_FSM_FSM状态机_FSM规范_三段式状态机_状态机

    状态机(Finite State Machine, FSM)是计算机科学和软件工程中的一个重要概念,它是一种数学模型,用于描述系统在不同状态间的转换。在这个压缩包“FSM.rar”中,包含了一个特别规范化的FSM状态机模板,它采用了三...

    FSM_Mealy_fsm_mealy_

    **FSM_Mealy_fsm_mealy_:FPGA上的Mealy型状态机设计与Verilog实现** 在数字逻辑设计中,有限状态机(Finite State Machine, FSM)是一种重要的概念,用于控制系统的序列行为。在本项目中,我们将深入探讨Mealy型...

    fsm.zip_FSM_FSM example_zip

    **有限状态机(Finite State Machine, FSM)** 有限状态机是一种数学模型,广泛应用于计算机科学、电子工程、自动控制等领域。它通过定义一系列状态以及在这些状态之间转换的规则来描述系统的行为。在这个"FSM_...

    fsm.rar_FSM_FSM vhdl_状态机

    状态机(Finite State Machine, FSM)是数字系统设计中一种重要的概念,特别是在VHDL这样的硬件描述语言中,它被广泛用于实现各种控制逻辑。在本压缩包“fsm.rar”中,我们可以看到一系列与FSM相关的VHDL代码实例,...

    Python库 | oarepo_fsm-1.6.7-py2.py3-none-any.whl

    **Python库oarepo_fsm-1.6.7-py2.py3-none-any.whl详解** 在Python编程中,库是开发者的重要工具,它们提供了丰富的功能,帮助我们更高效地编写代码。`oarepo_fsm`是这样一个库,专注于状态机(Finite State ...

Global site tag (gtag.js) - Google Analytics