投稿日 | : 2007/05/22(Tue) 14:40 |
投稿者 | : ダンボ |
Eメール | : |
URL | : |
タイトル | : Re^10: LED制御について |
> ボタンを押すごとに(押しっぱなしでも)LED1→8へと一瞬で点き
> LED8→LED1に一瞬で戻って押しっぱなしだと永遠にループしてしまいます。
だからWait入れろって言ったのに(笑)
下記WaitルーチンはK.J.K.さんからの流用です。
注1.メインは無限ループなので停める手続きを考えておいた方が良い。
注2.No.9177 でなくてNo.9176 のほうのサンプルを下書きにしたようだがいいの?
注3.チャタリング対策していません。
チャタリング?ハードウェアの方で実装すべきものでは?(とハード屋と喧嘩するソフト屋)
Option Explicit
Private Declare Function MsgWaitForMultipleObjects Lib "user32.dll" _
(Optional ByVal Count As Long = 0&, _
Optional ByVal HandlesPointer As Long = 0&, _
Optional ByVal WaitAll As Long = 0&, _
Optional ByVal Milliseconds As Long = 0&, _
Optional ByVal WakeMask As Long = &HFF&) As Long
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Private Sub Wait(WaitTime As Long)
Dim iStart As Long, iInterval As Long
iStart = GetTickCount()
iInterval = WaitTime
Do
If 0& = MsgWaitForMultipleObjects(, , , iInterval) _
Then DoEvents
iInterval = WaitTime - GetTickCount() + iStart
Loop While (iInterval >= 0&)
End Sub
Private Sub Form_Load()
Do
Call CheckAndLight()
Call Wait(10)
DoEvents
Loop
End Sub