电梯状态机

电梯控制程序-状态机

首先我们得知道状态机思想是什么意思,我找到一篇csdn的帖子,大家可以去看看

(83条消息) 状态机简单介绍_Evan丶K的博客-CSDN博客_状态机的三个部分

状态 事件 动作

  1. 状态,包括状态机所有的状态

  2. 条件,又称为**“事件”**,当触发一定条件后,条件便会触发,用于状态的切换

  3. 动作,对应状态下会有不同的动作,或者没有动作

在电梯控制程序中,初步可以划分:

状态有:

停下,上升,下降,等待

条件有:

条件含义
Up_flag是否前往上方楼层
Down_flag是否前往下方楼层

动作有:

等待对应动作,输入需要前往的楼层,每次输入后如果超过5s,电梯启动。

停下对应的动作,电机停下,打开门

上升下降对应的动作,电机启动,关闭门

状态转换:

在这里插入图片描述

其他功能:

1、电机,用于模拟电梯上升及下降

2、串口,用于上报电梯所处状态,监控

3、eeprom,当前楼层,当突然断电,重启后,仍然是上次断电时的楼层

状态机代码架构

enum status11{stop,up,down,wait} status;//停下,上升,下降,等待
status = write;
    switch(status){
        case wait:
            //动作:
            //通过按键控制,确认前往楼层
            //如果按键按下5s后,没有按键再次按下就会进入下方判断,进行次态判断
            
            //次态:
            //如果有上方目标楼层,则次态为		向上运行	up
            //如果只有下方目标楼层,则次态为		向下运行	down
            
            //如果没有按键按下,一直等待!!!		次态为自己	wait
            break;
        case stop:
            //动作:
            //打开门,延时一会儿
            //关门
            
            //次态:
            //如果上面还有目标楼层,次态为		  up
            //如果只有下面还有目标楼层,次态为		down
            //如果上下都没有楼层了,次态为		 wait
            break;
        case up:
            //动作:
            //运行一会后,当前楼层数加一
            
            //次态:
            //如果当前楼层是目标楼层,则次态为	停下	stop
            //如果当前楼层不是目标楼层,次态为	上升	up
            break;
        case down:
            //动作:
            //运行一会后,当前楼层数减一
            
            //次态:
            //如果当前楼层是目标楼层,则次态为	停下	stop
            //如果当前楼层不是目标楼层,次态为	下降	down
            break;   
    }

关键函数:

char target[10];//目标楼层,多设置了一些,一共六楼,为1的代表目标楼层
char Now_num;  //当前楼层

char up_judge(){	//判断是否向上,是向上,返回值为1,
    char accu;
    for(int i = 9 ; i>Now_num ; i--)	accu += target[i];	
    if(accu > 0)	return 1;
    else 			return 0;
}
char down_judge(){	//判断是否向下,是向下,返回值为1,
    char accu;
    for(int i = 1 ; i<Now_num ; i++)	accu += target[i];	
    if(accu > 0)	return 1;
    else 			return 0;
}

添加功能:(未添加)

这电梯是专门针对,乘客已经处于电梯中了,现在的楼层按键都是设置在电梯内部的,一般电梯实际上,在入口出还设置有两个按键,用来使乘客进入电梯。

我就立马想到,正好,我们这个指南者的板子上不是带了两个按键吗?正好可以用来作为进入电梯的按键。

具体来说:

一般情况下,得先按K1,K2两个按键,开门延时,门开延时,关门延时,使得乘客进入。

所以,编程思路是,按下K1,后播放乘客进入电梯的动画

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值