关于状态转换的一点想法

状态转换

近期在实现一些个功能的时候总也会遇到状态紊乱的现象,在这里记录下自己解决的一种思路吧。
其实要实现的功能是
(1)人来的时候灯会开,
(2)人走的时候灯会关,
(3)人来是可以控制灯开,关,灯越亮,越暗
(4)人走是可以控制灯开,关,灯越亮,越暗
看起来很简单,但是其实实现起来很乱,个人思路是使用状态机来做
使用onehot编码来实现,分为12个状态
人来:10000
人来按开灯:11000
人来按关灯:10100
人来按灯亮:10010
人来按灯暗:10001
人来的灯稳定状态:1ffff
人走:00000
人走按开灯:01000
人走按关灯:00100
人走按灯亮:00010
人走按灯暗:00001
人走的灯稳定状态:0ffff
其实不难理解其实本质就是抽象三个状态
在这里插入图片描述
如果人来了,那么就进入了10000,此时按下开进入11000,会进入Open(),
按下关进入10100会进入Shut(),按下调亮进入10010,进入Up(),但是此时如果不改变状态,下次还会进入10010,再次进入Up(),所以需要进入一个稳定状态来避免进入10010所以进入了1ffff,对于调暗同理,同时对于人走也是一个道理。然后我们就讲清楚了
人走到稳定
人来到稳定
的两个状态
还差人走00000到人来10000的状态,这两个进行转换的设定好了后就完成了所有状态的转换,完成了任务。

转换例子

以下是最流畅的转换方式,完全在三个大状态下转换
在这里插入图片描述

当然还可以变形,因为对于打开和关闭是可以自维持的,可以自动锁定自己状态,不跳到稳定都可以的
在这里插入图片描述
当然思路不会局限于此,还可以采用边沿触发来省去对应的最高位代表的人走到人来的bit,以此节省资源。
当然后续由于需要加入所谓的温度改变转速,所以又加入两个状态
也就是如果打开了同时没有手动调节温度,那么会进入自动温度调节转速状态
(同时加入了自启动状态)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值