這一題發問的時間也很久了,連我也忘了當初是哪位同學提出的問題?加上這題不好做工作又忙,只能找時間慢慢處理


這一題不如當初提問同學想的那麼簡單,只要將部落格內關於電子鐘和簡易定時程式相結合就可以解決。根據附加的條件使這題很難處理,有很多細節要克服

 

 

鬧鐘題目條件:


1.使用7段LED數字顯示電子鐘時間


2.可設定鬧鈴啟動時間,時間到達時響鈴


3.有貪睡按鈕,每按一次延後5分鐘響鈴,可按3次共延長15分鐘,3次以後貪睡按鈕無作用


4.有解除按鈕,按下後解除響鈴


5.響鈴為每隔1秒間歇響鈴,響鈴時間2分鐘,2分鐘後停止響鈴


6.程式不能使用事件結構

 

 

以上條件看似簡單,但有幾個較麻煩的技術問題要處理:


1.跨日期時的時間處理,這包含很多部分:


    a.響鈴時間的2分鐘剛好有跨過日期時


    b.貪睡按鈕延長的時間跨日期時


    c.設定時間剛好在跨日期的時間點(0點0分)上時


2.解除按鈕按下後恢復待機的處理方法:在跨日期時自動恢復待機


3.時間重新設定時如何判斷是否要恢復待機


4.各主要操作功能的順序鎖定:如響鈴沒有動作時,貪睡按鈕和解除按鈕沒有作用,貪睡按鈕按達到3次時自我鎖定,直到恢復待機時覆原

 

 

在仔細檢討整個動作流程後,把程式一些主要部分以SubVI方式處理。除了可使程式畫面較簡單外,也可提升程式執行效率


整個程式的編寫可說是置頂文章LabVIEW寫作心得的實踐

 

 

首先從SubVI的編寫開始說明:

 


一.7段LED顯示器解碼:


程式面板分成數值輸入和7個LED元件構成數字的叢集輸出

20111226-01  

 

程式部分則是先把0~9的7個LED變化狀態構成2D陣列,輸入的數值為索引取出相對應的狀態,再將陣列轉成叢集資料形態輸出

20111226-02  

 

 

二.設定鬧鈴時間:


程式面板完全按照規畫的輸出入接點去排列,左邊全是以輸入為主,輸出全放到右邊。SubVI的接點以這樣排列可避免連線時交錯混亂

20111226-03  

 

程式部分:


修改時間在觸發時會取代設定時間,同時也會取代動作時間,這樣的設定是要在系統重置時,將被貪睡按鈕改過的動作時間復原


同時程式會比較新設定的時間是否大於等於系統時間,是的話就輸出True到觸發OUT,成為待機訊號

20111226-04  

 

 

三.貪睡時間計算:


程式面板同樣是按照規畫把輸出入接點分左右邊排列,後續SubVI也是同樣處理

20111226-05  

 

程式的重點是待機訊號要True時才能動作,另外貪睡按鈕按滿3次,則程式不動作


另一個重點是先計算(分),當加上的延長時間(分)超過要進位時,則時間(時)進位,當時間(時)超過時(超過跨日點)則時歸0

20111226-06-01  

20111226-06-02  

 

 

 

四.鬧鈴時間比對:


程式面板

20111226-07  

 

程式部分則是在系統時間到達時開始輸出True給鬧鈴啟動訊號,同時開始累積計時,當累積計時達到時,則輸出False給鬧鈴啟動訊號


之所以使用累積計時方式是要避開跨時進位和跨日進位的複雜計算

20111226-08  

 

 

五.鬧鈴解除訊號:


程式面板

20111226-09  

 

這個SubVI的啟動條件就是鬧鈴啟動訊號為True


程式重點是直接關閉聲音輸出的程式,只有單一動作,為一復原成待機狀態的方法就是待機訊號要True

20111226-10  

 

 

六.間歇訊號輸出:


程式面板

20111226-11  

 

程式重點是在鬧鈴啟動訊號為True時,以秒為單位交替輸出True和False訊號

20111226-12  

 

 

 

再來是整個程式架構部分:

 


1.操作資料流的初始化:


    a.迴圈外左上:主要是設定時間,和判斷系統時間是否小於等於設定時間,若小於等於設定時間則讓待機的訊號True。另外程式有很多資料要傳遞,使用了大量的移位暫存器,在每條移位暫存器資料上附加了簡單文字標明資料用途

20111226-15  

 

    b.迴圈外左下:響鈴聲音輸出設定,借用範例程式改造。設定以方波輸出44.1千赫,這樣的設定是要聲音夠吵又不刺耳

20111226-16  

 

 

2.程式上方往下一開始是把系統時間輸出,透過7段LED顯示器解碼SubVI轉換成電子鐘顯示

20111226-17  

 

 

3.其次是設定時間輸入,這裡有加上限制條件,確保輸入的數值在合理的範圍內

20111226-18  

 

 

4.接著設定鬧鈴時間SubVI和貪睡時間計算SubVI串連。設定鬧鈴時間SubVI兼具系統復歸重置的作用,所以在控制輸入端多加了當系統時間等於0時0分時觸發復歸的訊號


設定鬧鈴時間SubVI輸出的訊號同時控制後續的SubVI是否可以待機預備動作


貪睡時間計算SubVI則是受響鈴啟動的訊號控制是否能動作

20111226-19  

 

 

5.再來鬧鈴時間比對SubVI比對系統時間是否大於等於動作時間,於時間到達時輸出響鈴啟動True訊號,於響鈴2分鐘後輸出響鈴啟動False訊號

20111226-20  

 

 

6.鬧鈴解除訊號SubVI同樣受響鈴啟動的訊號控制是否能動作,動作時強迫控制聲音輸出的SubVI輸出False訊號


可由設定鬧鈴時間SubVI輸出的訊號控制復歸

 20111226-22  

 

 

7.右邊則是控制電子鐘面板上時分秒之間點的閃爍

20111226-21  

 

 

8.間歇訊號輸出SubVI則是在收到響鈴啟動True訊號後,以每秒的間隔輸出不連續的True訊號

20111226-23  

 

 

9.在收到不連續的True訊號時輸出方波聲音

20111226-24  

 

 

10.整體程式架構如下圖:

20111226-14  

 

 

程式執行畫面:

20111226-13  

arrow
arrow
    文章標籤
    LabVIEW 計時 鬧鐘
    全站熱搜

    未出師的小工程師 發表在 痞客邦 留言(0) 人氣()