-
Sep 11th, 2009, 04:39 PM
#1
Thread Starter
New Member
Control 8 LEDs using parallel port in vb
I need to control 8 LEDs. each led have an On button and an Off button.
I used this code:
to turn on led 1
Private Sub Command1_Click()
Port1 = 888
Out Port1, 1
End Sub
to turn on led 2
Private Sub Command2_Click()
Port1 = 888
Out Port1, 2
End Sub
to turn on led 3
Private Sub Command3_Click()
Port1 = 888
Out Port1, 4
End Sub
to turn on all leds
Private Sub Command4_Click()
Port1 = 888
Out Port1, 255
End Sub
to turn off all leds
Private Sub Command5_Click()
Port1 = 888
Out Port1, 0
End Sub
When I run the code and want to turn on 2 or 3 or 4 the LEDs at once, I can only turn on one LED at a time. Each time I click the next ON button, the LED chosed before turns off and the new chosen LED turns on.
And what's the code to off each LED?
-
Sep 11th, 2009, 06:34 PM
#2
Re: Control 8 LEDs using parallel port in vb
<--- Did someone help you? Please rate their post. The little green squares make us feel really smart!
If topic has been resolved, please pull down the Thread Tools & mark it Resolved.
Is VB consuming your life, and is that a bad thing??
-
Sep 12th, 2009, 11:47 PM
#3
Addicted Member
Re: Control 8 LEDs using parallel port in vb
@mohdh..., hello. It is strongly recommended for you to teach something about using of VB6's "control array" and then you can make more efficient program like this with just few lines of code.
Which led's will be turned on or off depends about logical (and so electrical) state of bits in byte which you send to port.
If 255 turns on all led's in then 254 turns first led off, 253 second, 252 first and second and so on following the logic of say binary counter.
That mean that for turning leds you just need to toggle state of certain bit in byte you send. For this it would be useful to read port too, not just write.
Unfortunately, VB6 havent native functions for binary conversions but you can easily make you routines for such a job or find ready ones on the net.
I find something useful for start at fast.
Code:
Public Function BinToDec(BinNum As String) As String
Dim i As Integer
Dim DecNum As Long
On Error GoTo ErrorHandler
' Loop thru BinString
For i = Len(BinNum) To 1 Step -1
' Check the string for invalid characters
If Asc(Mid(BinNum, i, 1)) < 48 Or _
Asc(Mid(BinNum, i, 1)) > 49 Then
DecNum = ""
Err.Raise 1002, "BinToDec", "Invalid Input"
End If
' If bit is 1 then raise 2^LoopCount and add it to DecNum
If Mid(BinNum, i, 1) And 1 Then
DecNum = DecNum + 2 ^ (Len(BinNum) - i)
End If
Next i
' Return DecNum as a String
BinToDec = DecNum
ErrorHandler:
End Function
Public Function DecToBin(DecNum As String) As String
Dim BinNum As String
Dim lDecNum As Long
Dim i As Integer
On Error GoTo ErrorHandler
' Check the string for invalid characters
For i = 1 To Len(DecNum)
If Asc(Mid(DecNum, i, 1)) < 48 Or _
Asc(Mid(DecNum, i, 1)) > 57 Then
BinNum = ""
Err.Raise 1010, "DecToBin", "Invalid Input"
End If
Next i
i = 0
lDecNum = Val(DecNum)
Do
If lDecNum And 2 ^ i Then
BinNum = "1" & BinNum
Else
BinNum = "0" & BinNum
End If
i = i + 1
Loop Until 2 ^ i > lDecNum
' Return BinNum as a String
DecToBin = BinNum
ErrorHandler:
End Function
Simply use this functions like:
Code:
OUT Port1, BinToDec("10110101")
or whatewer you need for knowing what you send to port. Where is "1" led will be turned on and opposite (or inverted, depends...).
-
Sep 13th, 2009, 04:13 AM
#4
Addicted Member
Re: Control 8 LEDs using parallel port in vb
Hi, you need to add the binary numbers!
so a value of 1 turns on LED one
2 turns on LED 2
4 turns on LED 3
BUT
If you want led 1 AND 2, the value should be 3 (value 1 plus 2)
if you want LED 1 AND 2 AND 3, then you need a value of 7 (1, plus 2, plus 4)
does that make sense? sorry, bit hungover this morrning, if not, let me know and i'll explain further!
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|