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.pswp.cn/bicheng/14305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14305.shtml
英文地址,請注明出處:http://en.pswp.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)是一種行為型設計模式,它定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換。策略模式讓算法的變化不會影響使用算法的客戶端,使得算法可以獨立于客戶端的變化而變化。…