Energia单片机实验-饮水机模拟

一、要求分析

    利用状态机程序思想,使用MSP-EXP430F5529 Launchpad板卡实现以下模拟饮水机的功能。

    饮水机是我们生活中常见的家用设备。假设一个简易的饮水机有两个按键:童锁按键[PUSH1]热水按键[PUSH2]

    按键功能说明: 1.童锁按键: ① 平时“童锁按键”处于锁定状态[RED_LED初始化条件],长按“童锁按键”3秒后进入解锁状态[长按PUSH1事件]; ② 如果“童锁按键”处于解锁状态,3秒内没有按下“热水按键”,“童锁按键”回到锁定状态[闲置PUSH2事件]。 2.热水按键: ①“童锁按键”处于锁定状态时,按下“热水按键”不起作用(不放水)[无用限制条件]; ② “童锁按键”处于解锁状态时,按“热水按键”(按键释放有效)进入放水状态,开 始放水[松开PUSH2事件];  处于放水状态时,再次按“热水按键”(按键释放有效),停止放热水,“童锁按键” 回到锁定状态[松开PUSH2事件]; ③ 处于放水状态时,按“童锁按键”不起作用[放水时童锁一定解锁,按童锁键是为了解锁,本身成立]。 ④在解锁状态时,长按“热水按键”超过3秒不放,不会自动回到“锁定状态”,按“童锁按键”也不起作用。[这里的长按具有迷惑性,根据前面其他描述,恢复锁定状态的条件是通过PUSH2未按下时作出闲置响应,但是按下了PUSH2后,PUSH2处于按击状态,不用考虑恢复锁定的问题] 。请设计程序,模拟饮水机的工作PUSH1为“童锁按键”,PUSH2为“热水按键”;锁定状态红 色LED亮,解锁状态红色LED灭;放水状态绿色LED亮。

二、完整代码 (仅供参考!!!)

#include "Timer.h"
int ChildLockState=0; //童锁状态,0锁定,1解锁
int ChildLockButtonState=0;  //童锁按键(PUSH1)状态,0闲置,1短按,2长按
int WaterState=0; // 放水状态,0不放水,1放水
int WaterButtonState=0;  //热水按键(PUSH2)状态,0闲置,1按下(不区分短按/长按)
int LastClButton=1;
int CurClButton=1;
int LastWButton=1;
int CurWButton=1;int ClCnt=0; //童锁按键长按计时器
int WCnt_Empty=0; //热水按键闲置计数器void setup() {pinMode(PUSH1,INPUT_PULLUP);pinMode(PUSH2,INPUT_PULLUP);pinMode(RED_LED,OUTPUT);pinMode(GREEN_LED,OUTPUT);digitalWrite(RED_LED,HIGH); //初始童锁锁定,红色LED亮digitalWrite(GREEN_LED,LOW); //初始处于未放水状态,绿色LED灭SetTimer(irsTimer,20);  //设置定时中断计时器,中断周期为20msSerial.begin(9600);
}void loop() {}void irsTimer()
{int ClButton=0; //童锁按键瞬时状态,0无改变,1按下,2松开int WButton=0;  //热水按键瞬时状态,0无改变,1按下,2松开//按键消抖,检测按键变化(1、童锁;2、热水按键)//1、检测童锁按键变化CurClButton=digitalRead(PUSH1);if(CurClButton!=LastClButton){if(CurClButton==LOW)   ClButton=1;else  ClButton=2;}//2.检测热水按键变化CurWButton=digitalRead(PUSH2);if(CurWButton!=LastWButton){if(CurWButton==LOW)   WButton=1;else  WButton=2;}//检测按键状态//检测童锁按键状态switch(ChildLockButtonState){case 0:if(ClButton==1) {ChildLockButtonState=1; //若按下按键,切换为短按状态ClCnt=0;}break;case 1:if(ClButton==2){ChildLockButtonState=0; //若松开按键,切换为闲置状态ClCnt=0;}else if(ClButton==0)  //如果按键状态未改变,则开始计数{ClCnt++;if(ClCnt>=150)   //3s/20ms=150{ChildLockButtonState=2; //达到计数门限,切换为长按状态ClCnt=0;}}break;case 2: //长按童锁时,解锁童锁(不放水状态时)if(ClButton==0){ChildLockState=1;  ChildUnlocked();WCnt_Empty=0;}if(ClButton==2) {ChildLockButtonState=0;}break;}switch(WaterButtonState) {case  0:if(WButton==0){if(WaterState==0&&ChildLockState==1){Serial.println(WCnt_Empty);WCnt_Empty++; if (WCnt_Empty>=150){WCnt_Empty=0;ChildLockState=0;  //3s未按热水按键,锁定童锁ChildLocked();}}}if(WButton==1)WaterButtonState=1;  //若按下按键,切换为短按状态break;case 1:if(WButton==2) //完整短按一次热水按键,若童锁已解锁则放水{if(ChildLockState!=0) WaterButtonPush();WaterButtonState=0;WCnt_Empty=0;}break;}LastClButton=CurClButton;LastWButton=CurWButton;}void NoWater()
{digitalWrite(GREEN_LED,LOW);
}void InWater()
{digitalWrite(GREEN_LED,HIGH);
}void ChildLocked()
{digitalWrite(RED_LED,HIGH);
}void ChildUnlocked()
{digitalWrite(RED_LED,LOW);
}void WaterButtonPush()
{//若未放水则开始放水if(WaterState==0){WaterState=1;InWater();}//若已在放水,则将童锁锁定,停止放水else{ChildLockState=0;ChildLocked();WaterState=0;NoWater();} 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联盟 | 歌者 AIPPT X HelpLook携手,开启企业高效办公新时代

面对日益增长的工作负荷和追求效率优化的压力,企业知识的积累与传播显得愈发重要。如何系统化地沉淀员工与企业的知识精华?如何快速分享内外部知识?更重要的是,如何在获取这些知识后,迅速将其转化为精美的PPT&#xff…

USB-HID 键盘描述符简介

USB-HID 键盘描述符简介 USB-HID键盘设备描述符: #define DEVICE_DESCRIPTOR_SIZE 0x12 #define USB_CTRL_TEST_SZIE 8 #define CONFIG_DESCRIPTOR_SIZE_DUSB 0x0029 //0x0022//0x0029 #define HID_REPORT_DESCRIPTOR_SIZE_DUSB 0x004…

人类交互3 皮肤感觉与运动系统

皮肤感觉概述 皮肤是人体最大的器官之一,具有多种感觉功能,包括: 触觉:通过触觉,我们能感知物体的形状、质地,帮助我们与外界环境进行互动和感知周围物体的特征。 热觉:热觉使我们能感知周围环…

ridge lightgbm catboost

本文从理论基础、代码实践、内容总结三个方面来展示预测的三大基础模型与手动调参自动调参内容细节。 一、理论基础 ridgeRegression 图片: https://uploader.shimo.im/f/uX43BitluzbQeqht.jpg!thumbnail?accessTokeneyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1Q…

哪款电脑桌面日历记事本软件好用?推荐优秀的电脑日历记事本

对于众多上班族而言,每天在电脑前忙碌已成为生活常态。若想提升工作效率,简化繁琐的工作流程,选择一款出色的电脑桌面日历与记事本软件就显得至关重要。 然而,在Windows操作系统上设定提醒显得相当繁琐,而系统自带的记…

机器学习之注意力机制

概念 注意力机制(Attention Mechanism)是机器学习,特别是深度学习中一种重要的技术,最初被用于自然语言处理(NLP)任务,如机器翻译。它的核心思想是,让模型在处理输入数据时,能够“关注”到数据中的重要部分,而不是一视同仁地处理所有部分。这种机制极大地提高了模型…

Python贪心算法

贪心算法(Greedy Algorithm)是一种常见的算法设计策略,它在每一步选择当前最优解,希望通过局部最优解最终得到全局最优解。贪心算法通常适用于满足一些特定条件的问题,例如货币找零、活动选择、任务调度等。贪心算法的…

Discourse 中可能使用的 HMAC 算法 Java 实现

在 DiscourseConnect 中,对数据的签名使用的是 HMAC 算法。 实际使用的算法为 HmacSHA256。 Java 生成签名的方法很简单。 String hmac new HmacUtils(HmacAlgorithms.HMAC_SHA_256, "55619458534897682511405307018226").hmacHex(ssoPayload);HmacUti…

lvm磁盘创建失败Couldn‘t create temporary archive name

问题情况: 在客户单位创建lvm时,执行vgextend提示异常信息: 挂载磁盘报如下错误: ]# vgextend centos /dev/xvdb Physical volume “/dev/xvdb” successfully created. Couldn’t create temporary archive name. 原因:存储使用100%,无法挂载,须预留部分空间出来。 解…

工程项目核算报价-项目CPQ报价系统控成本高效完成工程项目报价

首先了解一下CPQ报价如何解决工程项目报价难的? 目前市场上的工程项目报价方案制作效率低,易出错,反复修改,成本核算的过程不够严谨,凭以经验和数据大差不差的估算当下项目,报价过程中会忽略侧面因素,导致…

Elasticsearch 分析器的高级用法二(停用词,拼音搜索)

Elasticsearch 分析器的高级用法二(停用词,拼音搜索) 停用词简介停用词分词过滤器自定义停用词分词过滤器内置分析器的停用词过滤器注意,有一个细节 拼音搜索安装使用相关配置 停用词 简介 停用词是指,在被分词后的词…

uwsgi状态监控

使用 uWSGI 内置的状态服务器 uWSGI 提供了一个内置的状态服务器,你可以通过配置 uWSGI 来启用它,并使用 Web 浏览器或者通过 HTTP 请求来查看 uWSGI 的状态信息。 启用状态服务器 在 uWSGI 的配置文件中添加以下配置: [uwsgi] ... sta…

【MySQL精通之路】InnoDB(3)-MVCC多版本管理

InnoDB是一个多版本(MVCC)的存储引擎。 它保留有关更改行的旧版本的信息,以支持事务性功能,如并发和回滚。 这些信息存储在称为回滚段的数据结构中的Undo表空间中。 参见“Undo表空间”。 InnoDB使用回滚段(rollback…

TTS相关

文章目录 VALL-E-X简介code vist论文解读代码解读模块loss代码 valle名词解释 VALL-E-X 简介 微软VALL-E-X:夸克在用 可以预训练模型 端到端 code code:https://github.com/Plachtaa/VALL-E-X/tree/master 报错1: File "/mnt/TTS/VALL-E-X/tes…

RabbitMQ有哪些优缺点

一,RabbitMQ有哪些优势 RabbitMQ 作为一款流行的消息队列服务,具有许多优势,这些优势使得它在各种应用场景中都能发挥出色的作用。以下是 RabbitMQ 的一些主要优势: 高可靠性: RabbitMQ 使用持久化功能,无…

路由导航守卫-全局前置守卫

路由导航守卫中的全局前置守卫(Global Before Guards)是Vue Router中的一个重要概念。当路由即将改变(导航触发)时,这些守卫会按照创建顺序调用。它们允许你在路由跳转之前执行一些操作或判断,例如检查用户…

epoch的数据不能随便截取,不是特征,要根据时间!!!

长个记性,这半个多月像个笑话,哈哈哈哈

pip如何快速install packet

1、在后面加-i https://mirrors.aliyun.com//pypi//simple或https://pypi.tuna.tsinghua.edu.cn/simple pip install numpy -i https://mirrors.aliyun.com//pypi//simplepip install numpy1.21.0 -i https://pypi.tuna.tsinghua.edu.cn/simple2、需要注意的是,如果…

IDEA指南

IDEA简介 截止到2021.08.31,是全世界最流行的Java集成开发环境 tips 快捷键 ctrl alt v:快速生成方法返回值接收代码/** enter:生成javaDoc注释 IDEA常见error Error: java: System Java Compiler was not found in classpath Proj…

【Python设计模式04】策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化不会影响使用算法的客户端,使得算法可以独立于客户端的变化而变化。…