利用Counter與鍵盤按鈕觸發擷取訊號

大家好,目前我利用Counter來判斷目前的位置(0-360度),程式部分參考範例"Counter - Count Edges.vi"

再利用先前版上發問的鍵盤控制擷取訊號的程式結合在一起,

程式部分我利用鍵盤按鍵"A"與Counter偵測到角度"0"度時才開始擷取類比訊號,

實際運作時必須持續按著鍵盤按鍵"A,才可能在"角度"0"度時觸發擷取類比訊號,

但是有時可能因為轉速太快有時候會造成無法同時滿足以上兩個條件,進而無法擷取。

我有嘗試過將鍵盤按鍵"A"改成"OK Button",作動方式設定成"Switch When Released"

也嘗試將範例程式中的delay time刪去,

但是依然無法進行類比訊號的擷取。

想請問版上各位大大,是否有甚麼改善的方法與建議?

程式部分如附件。
謝謝大家不吝指教。


Analog_Keyboard.vi

Analog_Button.viBenjamin43059.4760416667
我記得我在另外一處有回覆你,把按鍵偵測至少要寫在最內層迴圈
請先試試看往同樣的方向思考,以便稍微改善問題





**********************
下面是額外的討論,我覺得你想要做的事,已經需要開始學習了解多迴圈處理按鍵偵測

會有新的程式架構設計,就是因為用過去的開發方式,會碰到困難
你碰到的經典問題就是,每圈迴圈開始的時候,偵測完鍵盤訊號,後面那段Sequence Structure的時期,都不偵測按鍵了
按鍵只在Sequence Structure結束的一瞬間,剛重新繞回迴圈的最開始時,會偵測一下按鍵。

有人可能會跟你說用狀態機,他在Sequence Structure結束後,會願意在偵側鍵盤按鍵的狀態好好的等待,
直到按鍵被偵測到之後進入後面的步驟(狀態)
但事實上,狀態機還是有額外問題的。進入執行Sequence Structure那段動作狀態時,你還是無法好好偵測按鍵的,尤其是你的按鍵的目的包含了要停止連續的功能。當你未來需要增加緊急停止等動作時,這些偵測如果要強行加進去,只是摧毀自己的單純的狀態設計而已。
MingYen43059.1562384259

如果需要針對短暫的觸發訊號進行取樣做為觸發訊號, 一般我會使用Shift Register進行上一次與最近一次的狀態比較.一但出現差異即判斷觸發.





針對你的程式, 取樣部分, 把DAQ設定的地方,移到程式一開始(While Loop外), 迴圈內部只剩鍵盤觸發與DAQ的取樣即可.



先謝謝 MingYen大大每次都耐心地回答我的問題也給了不少建議!!
最近雜事比較多,沒辦法好好坐在電腦前。
有試著把按鍵偵測的部分放在內層迴圈,實機測試的部分要最近才能作測試了。
[QUOTE=MingYen]
我記得我在另外一處有回覆你,把按鍵偵測至少要寫在最內層迴圈
請先試試看往同樣的方向思考,以便稍微改善問題





**********************
下面是額外的討論,我覺得你想要做的事,已經需要開始學習了解多迴圈處理按鍵偵測

會有新的程式架構設計,就是因為用過去的開發方式,會碰到困難
你碰到的經典問題就是,每圈迴圈開始的時候,偵測完鍵盤訊號,後面那段Sequence Structure的時期,都不偵測按鍵了
按鍵只在Sequence Structure結束的一瞬間,剛重新繞回迴圈的最開始時,會偵測一下按鍵。

有人可能會跟你說用狀態機,他在Sequence Structure結束後,會願意在偵側鍵盤按鍵的狀態好好的等待,
直到按鍵被偵測到之後進入後面的步驟(狀態)
但事實上,狀態機還是有額外問題的。進入執行Sequence Structure那段動作狀態時,你還是無法好好偵測按鍵的,尤其是你的按鍵的目的包含了要停止連續的功能。當你未來需要增加緊急停止等動作時,這些偵測如果要強行加進去,只是摧毀自己的單純的狀態設計而已。
[/QUOTE]
感謝jimmy 大大提供了一個用Shift Register的方法,只是可能我對於你附圖中所拉的程式可能有所誤解
剛剛試著用拉了一個簡單的程式:(如附件與附圖)
程式進入後按下按鍵"D"進入第一種亂數的顯示,
之後只要滿足 "按下鍵盤按鍵"A"" 與 "亂數值>0.5" 兩個條件,即可觸發第二種亂數的顯示。
這樣測試時我必須持續壓著其他的鍵盤按鍵,例如"S",然後壓著"S"的同時在按下"A"
才"有可能"觸發第二種亂數的顯示,因為第一種亂數的顯示有時未必會滿足>0.5的情況。
這如同counter所顯示的值也未必是0的情況。
因此我想向大大請教,是不是我誤解了你的意思??
謝謝! 麻煩了
最近雜事有點多,實際拿counter測試可能會這一兩天才去做。

[QUOTE=jimmy-Chen]如果需要針對短暫的觸發訊號進行取樣做為觸發訊號, 一般我會使用Shift Register進行上一次與最近一次的狀態比較.一但出現差異即判斷觸發.


針對你的程式, 取樣部分, 把DAQ設定的地方,移到程式一開始(While Loop外), 迴圈內部只剩鍵盤觸發與DAQ的取樣即可.

[/QUOTE]

shIft_register_test.vi