Matlab练习:timer(定时器3)
前言
同學畢設做信號辨識,需要嚴格設計時鐘信號,對于信號的精確產生有很高的需求,因此使用matlab的timer對象來實現該需求,本著學一個技術就要學精的原則,深入了解了matlab timer背后的實現原理,現將學習成果分享給大家。
主體
任務描述如下:
1多次執行回調函數:
顯示這個事件和在計時器開始運作,運行,和結束時的日期/時間產出。計時器回調函數會以2秒的間隔執行三次?;卣{函數傳遞的前兩條語句是定時器對象和事件結構的句柄。
事件結構有兩個成員:類型定義了回調函數的來源,數據則是一個包含事件什么時候發生的日期時間的向量。
輸出如下:
StartFcn executed 25-May-2018 20:12:16.344 TimerFcn executed 25-May-2018 20:12:19.345 TimerFcn executed 25-May-2018 20:12:21.345 TimerFcn executed 25-May-2018 20:12:23.345 StopFcn executed 25-May-2018 20:12:23.351同樣記得刪除這個定時器:
delete(t)
2定義一個通用的回調函數
創建一個定時器對象來提示你在接下來的8小時中每10分鐘學習30秒。
在一個名為createErgoTimer.m的文件里面創建一個返回定時器的函數。
在這個文件里包含著三個局部函數來處理定時器開始,執行和結束任務。
代碼如下:
使用起始延遲函數允許定時器在沒有指引你立即休息的情況下啟動計時器。
將執行模式設置為固定空間,因此在一個時間函數執行完后將是一個固定的耗散周期10分鐘30秒。這會允許你在下個10分鐘的間隔之間有30秒的休息時間。
在之間新建的createErgo.m文件中,增加一個本地函數來處理對應與定時器開始的任務。作為默認,定時器對象將它自己和事件數據傳遞給回調函數。這個函數忽略事件數據
function ergoTimerStart(mTimer,~) secondsPerMinute = 60; secondsPerHour = 60*secondsPerMinute; str1 = 'Starting Ergonomic Break Timer. '; str2 = sprintf('For the next %d hours you will be notified',...round(mTimer.TasksToExecute*(mTimer.Period + ...mTimer.UserData)/secondsPerHour)); str3 = sprintf(' to take a %d second break every %d minutes.',...mTimer.UserData, (mTimer.Period - ...mTimer.UserData)/secondsPerMinute); disp([str1 str2 str3]) end增加一個局部函數來處理和執行和任務相關的定時器。定義的定時任務回調函數應該告訴你應該休息30秒。
function takeBreak(mTimer,~) disp('Take a 30 second break.') end增加一個局部函數來處理和計時器停止相關的任務。
function ergoTimerCleanup(mTimer,~) disp('Stopping Ergonomic Break Timer.') delete(mTimer) end從內存中刪除計時器任務。
在命令行輸入createErgoTimer函數來創建和開始一個定時器。
運行結果
Starting Ergonomic Break Timer. For the next 8 hours you will be notified to take a 30 second break every 10 minutes.Take a 30 second break.周期休息定時器。
開始周期休息定時器。在接下來的八個小時中每10分鐘你會被提醒一次休息30秒。
你可以讓這個定時器運行八小時也可以手動停止它。包括在內存里面消除這個定時器。
停止周期間隔定時器。
參考:
mathwork官方文檔
總結
以上是生活随笔為你收集整理的Matlab练习:timer(定时器3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 调用带返回多个结果集的方法,PH
- 下一篇: Python:windows程序打包