投稿日 | : 2007/05/22(Tue) 12:01 |
投稿者 | : ユウジ |
Eメール | : |
URL | : |
タイトル | : Re^9: LED制御について |
どうしてもチャタリング対策の仕方が分かりません。
助言頂けると幸いです。
以下のソースで(スイッチが4個→8個になりました)LEDを点けて
ボタンを押すごとに(押しっぱなしでも)LED1→8へと一瞬で点き
LED8→LED1に一瞬で戻って押しっぱなしだと永遠にループしてしまいます。
どこにどのようにして「wait,waittimer」を入れれば宜しいのでしょうか?
自分でもかなり実験したのですが分からず仕舞でしたので・・・
ご迷惑かもしれませんが助言いただけないでしょうか?
Private Sub Timer1_Timer()
Dim lRet As Long, bRet(3) As Byte
Static BitNo As Integer
lRet = DioInpBit(lHandle, 0, bRet(0)) '**順次点灯スイッチ
lRet = DioInpBit(lHandle, 1, bRet(1)) '**リセットスイッチ
lRet = DioInpBit(lHandle, 2, bRet(2)) '**まだ使わないスイッチ
lRet = DioInpBit(lHandle, 3, bRet(3)) '**まだ使わないスイッチ
'**順次点灯スイッチ押した場合(スイッチ1)
If bRet(0) <> 0 Then
Label1(0).BackColor = &HFF
Select Case BitNo
Case 0
'**LED1を点ける
lRet = DioOutBit(lHandle, 0, 1)
'**LED8を消す
lRet = DioOutBit(lHandle, 7, 0)
Case 1
'**LED1を消す
lRet = DioOutBit(lHandle, 0, 0)
'**LED2を点ける
lRet = DioOutBit(lHandle, 1, 1)
Case 2
'**LED2を消す
lRet = DioOutBit(lHandle, 1, 0)
'**LED3を点ける
lRet = DioOutBit(lHandle, 2, 1)
Case 3
'**LED3を消す
lRet = DioOutBit(lHandle, 2, 0)
'**LED4を点ける
lRet = DioOutBit(lHandle, 3, 1)
Case 4
'**LED4を消す
lRet = DioOutBit(lHandle, 3, 0)
'**LED5を点ける
lRet = DioOutBit(lHandle, 4, 1)
Case 5
'**LED5を消す
lRet = DioOutBit(lHandle, 4, 0)
'**LED6を点ける
lRet = DioOutBit(lHandle, 5, 1)
Case 6
'**LED6を消す
lRet = DioOutBit(lHandle, 5, 0)
'**LED7を点ける
lRet = DioOutBit(lHandle, 6, 1)
Case 7
'**LED7を消す
lRet = DioOutBit(lHandle, 6, 0)
'**LED8を点ける
lRet = DioOutBit(lHandle, 7, 1)
End Select
BitNo = BitNo + 1
If BitNo > 7 Then
BitNo = 0
End If
Else
Label1(0).BackColor = &H8000000F
End If
'**リセットスイッチ押した場合(スイッチ2)
If bRet(1) <> 0 Then
Label1(1).BackColor = &HFF
lRet = DioOutBit(lHandle, 0, 0)
lRet = DioOutBit(lHandle, 1, 0)
lRet = DioOutBit(lHandle, 2, 0)
lRet = DioOutBit(lHandle, 3, 0)
lRet = DioOutBit(lHandle, 4, 0)
lRet = DioOutBit(lHandle, 5, 0)
lRet = DioOutBit(lHandle, 6, 0)
lRet = DioOutBit(lHandle, 7, 0)
BitNo = 0
Else
Label1(1).BackColor = &H8000000F
End If
'**スイッチ3(使わない
If bRet(2) <> 0 Then
Label1(2).BackColor = &HFF
Else
Label1(2).BackColor = &H8000000F
End If
'**スイッチ4(使わない
If bRet(3) <> 0 Then
Label1(3).BackColor = &HFF
Else
Label1(3).BackColor = &H8000000F
End If
End Sub