hallo
ik ben bezig geweest met het maken van het programma dat is beschreven in het artikel van prof-botje: lpt aansturen
allen had ik 20 errors om dat het programma de codes niet kent.
Public Class Form1
Private Sub Button1_Click()
Call LPT_DataReg_PinHigh(BIT0)
End Sub
Private Sub Button1_Click()
Call LPT_DataReg_PinLow(BIT0)
End Sub
End Class
is mijn code
Error 1 'Private Sub Button1_Click()' has multiple definitions with identical signatures
Error 2 Name 'LPT_DataReg_PinLow' is not declared
Error 3 Name 'BIT0' is not declared
zijn de foutmeldingen
wat moet ik doen?
en waar vind ik de codes voor (in hetzelfde programma) andere compnenten. asl ik bijvoorbeeldwil dat ik een "bitprogramma" maak die, als ik hem afspeel, de ingestelde bits tegelijkertijd of apart afspeelt. zodat je iets herhalend kan besturen bijvoorbeeld?
Jos kuijpers
12 jaar
LPT_DataReg_Pinhigh zal een sub zijn in je applicatie. D.w.z. je krijg dan bijvoorbeeld:
Private Sub LPT_DataRed_PinHigh(ByVal Bit as Integer)
'some code
End Sub
Wat er in deze Sub moet staan weet ik zo ook niet 
ik zal het even proberen
edit
Error 1 'Private Sub LPT_DataRed_PinHigh(Bit As Integer)' has multiple definitions with identical signatures
en hoe geef ik aan welke bit hij moet hebben? ik heb namenlijk 8 knoppen aan en 8 uit
[Bericht gewijzigd door Jossie Kuijpers op ]
ten eerste heb je twee procedures met dezelfde naam (button 1).
ten tweede zal dat lpt_nogwat een dll moeten aanroepen en die heb je niet gedeclareerd naar ik aanneem of zelfs niet eens op je computer gezet
ten derde zul je bit0 inderdaad zelf moeten declareren als
const bit0 = 1
const bit1 = 2
const bit2 = 4
etc
[Bericht gewijzigd door ikkedus op ]
welke dll? ik heb een programma moeten installeren met een dll
moet ik die in de map zetten?
is het rijtje 1 2 4 8 of 1 2 4 6 8 10
moet ik intypen Const BIT0=1 of anders, en in de bovenste regel van het sub toch?
[Bericht gewijzigd door Jossie Kuijpers op ]
klopt dit? Public Class Form1
Private Sub LPT_DataRed_PinHigh(ByVal Bit As Integer)Const BIT0=1
'some code
End Sub
Private Sub LPT_DataRed_PinLow(ByVal Bit As Integer)Const BIT0=1
'some code
End Sub
End Class
het spijt me dat ik zoveel vraag, maar ik leer het wel. denk ik
nee, dat klopt niet.
Als je io.dll hebt, zul je parmon.exe ook wel meteen hebben mee gedownload denk ik. Start dit programmaatje op.
Start VB met een nieuw form en zet een timer op het form (vergeet die module). Kopieer dan onderstaande code in de code onder het form (eventueel aanpassen voor VB2005). Let dan op wat parmon.exe doet. Dat zijn je datapinnen.
Let op dat je de outputpinnen (dataregister) van de poort niet kortsluit. Inputpinnen mag je wel naar de Gnd trekken. Op geen enkele pin van de poort mag je een externe spanning zetten.
Option Explicit
' Download Fred Bulback's Dynamic Link Library (DLL) called io.dll from: http://www.geekhideout.com/ and
' copy it into the C:\WINDOWS\SYSTEM directory.
Private Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte)
Private Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte
' Address
' Data Base = &H278 / &H378 / &H3BC
' Status Base + 1
' Control Base + 2
Const LPT_REGISTER_DATA = &H378
Const LPT_REGISTER_STATUS = &H378 + 1
Const LPT_REGISTER_CONTROL = &H378 + 2
' data status control
Const BIT0 = &H1 ' D0 0 /STROBE
Const BIT1 = &H2 ' D1 0 /AUTOFEED
Const BIT2 = &H4 ' D2 0 /INIT
Const BIT3 = &H8 ' D3 ERROR /SLCTIN
Const BIT4 = &H10 ' D4 SELECT 0
Const BIT5 = &H20 ' D5 PAPER EMPTY 0
Const BIT6 = &H40 ' D6 ACK 0
Const BIT7 = &H80 ' D7 /BUSY 0
Private Sub Form_Load()
Form1.Timer1.Enabled = True
Form1.Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer()
Static Toggle As Boolean
If Toggle = True Then
Call PortOut(LPT_REGISTER_DATA, BIT0 Or BIT1 Or BIT2 Or BIT3)
Else
Call PortOut(LPT_REGISTER_DATA, BIT4 Or BIT5 Or BIT6 Or BIT7)
End If
Toggle = Not (Toggle)
End Sub
ik heb een nieuw form gemaakt en heb er een timer ingezet die heb ik verwerkt in de code, maardaarover geeft hij meldeing:
Error 1 'LPT_besturing.Form1' cannot refer to itself through its default instance; use 'Me' instead.
Error 2 'LPT_besturing.Form1' cannot refer to itself through its default instance; use 'Me' instead.
en als ik dit heb, dan kan ik hem toch nog steeds niet aansturen? per bit?
[Bericht gewijzigd door Jossie Kuijpers op ]
LPT_besturing
Waar komt dit vandaan? Dit staat niet in de code en komt ook niet van de dll. Gebruik je io.dll wel of zit je te rotzooien met een gare ocx ofzo?
ik zal het even uitleggen. ik ben opnieuw begonnen omdat alles een beetje vastliep. ik heb hem nu LPT besturing genoemt. meer niet. ik liet gewoon de errors zien.
ik heb iets moeten verwijderen in die code van jou, de eerst regel. meer heb ik niet gedaan
Form1.Timer1.Enabled = True
Form1.Timer1.Interval = 500
heb ik nog steeds en dat is fout, die form1.timer1.enabled
[Bericht gewijzigd door Jossie Kuijpers op ]
Gewoon alles laten staan zoals het heet als je VB opent. Als je meer dan 100 forms hebt en niks te doen hebt, dan ga je ze maar een naam geven ofzo.
het is al gotendeels gelukt, alleen:
voor
Private Sub Button1_Click()
Call LPT_DataReg_PinHigh(BIT0)
End Sub
geeft hij de error:
Error 1 Name 'LPT_DataReg_PinHigh' is not declared.
[Bericht gewijzigd door Jossie Kuijpers op ]
nee, die bestaat ook niet. LPT_DataReg_PinHigh is een functienaam die iemand ergens zelf verzonnen heeft en waar jij je op de een of andere manier aan vastklampt, maar daar heb je hier helemaal niks aan.
Private Sub Button1_Click()
' pin 4 high
Call PortOut(LPT_REGISTER_DATA, BIT4)
End Sub
Private Sub Button2_Click()
' all pins low
Call PortOut(LPT_REGISTER_DATA, 0)
End Sub
Er bestaan ook specifieke pinfuncties, maar die moet je net als die andere twee declareren, idem voor inputs, zie geekhideout website.
[Bericht gewijzigd door ikkedus op ]
is voor bijvoorbeeld pin 4 laag: 'pin 4 low? en die code heb ik opgekregen van prof botje in het artikel.
rarr hoor en de bits geven de verkeerde waarden aan. dus bit 7 is 128 en moet zoals in de lijst 80 zijn
ik heb nu:
Public Class Form1
' Download Fred Bulback's Dynamic Link Library (DLL) called io.dll from: http://www.geekhideout.com/ and
' copy it into the C:\WINDOWS\SYSTEM directory.
Private Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte)
Private Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte
' Address
' Data Base = &H278 / &H378 / &H3BC
' Status Base + 1
' Control Base + 2
Const LPT_REGISTER_DATA = &H378
Const LPT_REGISTER_STATUS = &H378 + 1
Const LPT_REGISTER_CONTROL = &H378 + 2
' data status control
Const BIT0 = &H1 ' D0 0 /STROBE
Const BIT1 = &H2 ' D1 0 /AUTOFEED
Const BIT2 = &H4 ' D2 0 /INIT
Const BIT3 = &H8 ' D3 ERROR /SLCTIN
Const BIT4 = &H10 ' D4 SELECT 0
Const BIT5 = &H20 ' D5 PAPER EMPTY 0
Const BIT6 = &H40 ' D6 ACK 0
Const BIT7 = &H80 ' D7 /BUSY 0
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.Timer1.Enabled = True
Me.Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer()
Static Toggle As Boolean
If Toggle = True Then
Call PortOut(LPT_REGISTER_DATA, BIT0 Or BIT1 Or BIT2 Or BIT3)
Else
Call PortOut(LPT_REGISTER_DATA, BIT4 Or BIT5 Or BIT6 Or BIT7)
End If
Toggle = Not (Toggle)
End Sub
Private Sub Button1_Click()
' pin 2 high
Call PortOut(LPT_REGISTER_DATA, BIT0)
End Sub
Private Sub Button2_Click()
' pin 2 low
Call PortOut(LPT_REGISTER_DATA, BIT0)
End Sub
Private Sub Button3_Click()
' pin 3 high
Call PortOut(LPT_REGISTER_DATA, BIT1)
End Sub
Private Sub Button4_Click()
' pin 3 low
Call PortOut(LPT_REGISTER_DATA, BIT1)
End Sub
Private Sub Button5_Click()
' pin 4 high
Call PortOut(LPT_REGISTER_DATA, BIT2)
End Sub
Private Sub Button6_Click()
' pin 4 low
Call PortOut(LPT_REGISTER_DATA, BIT2)
End Sub
Private Sub Button7_Click()
' pin 5 high
Call PortOut(LPT_REGISTER_DATA, BIT3)
End Sub
Private Sub Button8_Click()
' pin 5 low
Call PortOut(LPT_REGISTER_DATA, BIT3)
End Sub
Private Sub Button9_Click()
' pin 6 high
Call PortOut(LPT_REGISTER_DATA, BIT4)
End Sub
Private Sub Button10_Click()
' pin 6 low
Call PortOut(LPT_REGISTER_DATA, BIT4)
End Sub
Private Sub Button11_Click()
' pin 7 high
Call PortOut(LPT_REGISTER_DATA, BIT5)
End Sub
Private Sub Button12_Click()
' pin 7 low
Call PortOut(LPT_REGISTER_DATA, BIT5)
End Sub
Private Sub Button13_Click()
' pin 8 high
Call PortOut(LPT_REGISTER_DATA, BIT6)
End Sub
Private Sub Button14_Click()
' pin 8 low
Call PortOut(LPT_REGISTER_DATA, BIT6)
End Sub
Private Sub Button15_Click()
' pin 9 high
Call PortOut(LPT_REGISTER_DATA, BIT7)
End Sub
Private Sub Button16_Click()
' pin 9 low
Call PortOut(LPT_REGISTER_DATA, BIT7)
End Sub
End Class
Valt wel mee hoor
80 = 8*10 + 0*1 = 80
&H80 = 8*16 + 0*1 = 128
Maar professor botje is blijkbaar de uitvinder van al die procedures. Maar ik neem aan dat hij deze dan ergens verder heeft uitgewerkt.
------------------------------------------------------------------------
Kijk, die dll gebruikt subs en functies, bijvoorbeeld "PortOut" is er eentje
Die kun je gewoon aanroepen:
Private Sub Button1_Click()
Call PortOut(LPT_REGISTER_DATA, BIT4)
End Sub
------------------------------------------------------------------------
Je kunt ze ook in een zelfgemaakte sub zetten, bijvoorbeeld:
Private Sub MijnPortOut(ByVal MyBit as Long)
Call PortOut(LPT_REGISTER_DATA, MyBit)
end sub
Maar die moet je dan wel weer aanroepen met nog een sub, bijvoorbeeld:
Private Sub Button1_Click()
Call MijnPortOut(BIT4)
End Sub
------------------------------------------------------------------------
-functies verwijderd-
[Bericht gewijzigd door ikkedus op ]
declataties? en ik kan dat documentatiespul niet vinden
ik ben 12.
[Bericht gewijzigd door Jossie Kuijpers op ]
Ja, ok. Als je weet dat het werkt kan die timer er ook wel uit anders zit je daar weer mee.
Alleen...
' pin 2 low
Call PortOut(LPT_REGISTER_DATA, BIT0)
dit klopt wel, maar wat je doet is 1 schrijven naar het register, je krijgt dan 0000 0001. Pin 2 is dan inderdaad wel low, maar pin 1 wordt dan hoog!
' pin 3 high
Call PortOut(LPT_REGISTER_DATA, BIT1)
Idem, alleen werkt dit helemaal niet. Wat je hier krijgt is 0000 0010 en dat is dus niet pin 3.
>>>>>>> sorry, waarschijnlijk heb je wel gelijk, ik zit hier dus gewoon pin en bit door elkaar te halen, grr. Ik ga echt stoppen met die computer nu