Wen es interessiert, ich habe nun mein testprogramm erfolgreich erstellt:
Code: Alles auswählen
; IOWARRIOR - Geschwindigkeitsmessung für "SPEEDCAT"
; IOKIT.DLL muss im system32 stehen, IOKIT.LIB im gleichen VZ wie dieses PB-Programm
start:
OpenWindow(0,0,0,640,480,"Window",#PB_Window_SystemMenu)
ButtonGadget(20,490,430,140,40,"RESET")
TextGadget(4, 10, 140, 55, 15, "PortPuls")
TextGadget(1, 65, 140, 25, 15, "")
TextGadget(5, 10, 200, 55, 15, "Impuls")
TextGadget(2, 65, 200, 25, 15, "")
TextGadget(6, 10, 260, 55, 15, "Sekunden")
TextGadget(3, 65, 260, 25, 15, "")
TextGadget(7, 10, 320, 55, 15, "Impulse")
TextGadget(8, 65, 320, 35, 15, "")
TextGadget(9, 100, 320, 25, 15, "pro")
TextGadget(10, 140, 320, 35, 15, "")
TextGadget(11, 180, 320, 55, 15, "Sekunden")
TextGadget(12, 10, 380, 55, 15, "Speed")
TextGadget(13, 70, 380, 35, 15, "")
TextGadget(14, 120, 380, 55, 15, "cm/Sek")
If LoadFont(0, "Arial", 16)
SetGadgetFont(#PB_Default, FontID(0))
EndIf
TextGadget(15, 50, 20, 55, 35, "")
TextGadget(16, 120, 20, 55, 35, "Kmh")
TextGadget(17, 200, 20, 55, 35, "")
TextGadget(18, 260, 20, 60, 35, "Mph")
If LoadFont(1, "Arial", 8)
SetGadgetFont(#PB_Default, FontID(1))
EndIf
Import "C:\Users\oz\Desktop\iowarrior\iowkit.lib"
IowKitOpenDevice() As "_IowKitOpenDevice@0"
IowKitCloseDevice(devHandle.i) As "_IowKitCloseDevice@4"
IowKitGetNumDevs() As "_IowKitGetNumDevs@4"
IowKitGetDeviceHandle(devHandle.i) As "_IowKitGetDeviceHandle@4"
IowKitRead(devHandle.i, numPipe.l, buffer.l, length.l) As "_IowKitRead@16"
IowKitWrite(devHandle.i, numPipe.l, buffer.l, length.l) As "_IowKitWrite@16"
IowKitGetProductId(ioHandle) As "_IowKitGetProductId@4"
IowKitGetRevision(ioHandle) As "_IowKitGetRevision@4"
IowKitGetSerialNumber(ioHandle, Serial.s) As "_IowKitGetSerialNumber@8"
IowKitReadImmediate(ioHandle,buffer.s) As "_IowKitReadImmediate@8"
EndImport
Structure bufferByte
buffer1.c
buffer2.c
buffer3.c
buffer4.c
buffer5.c
buffer6.c
buffer7.c
buffer8.c
EndStructure
Define.bufferByte buffer
Define.l ioHandle
numPipe = 1
length = 8
IowKitOpenDevice()
ioHandle = IowKitGetDeviceHandle(1)
buffer\buffer1 = 255
buffer\buffer2 = 255
buffer\buffer3 = 255
buffer\buffer4 = 255
buffer\buffer5 = 255
Repeat
event = WaitWindowEvent(0)
If event = 0
IowKitWrite(ioHandle, numPipe,buffer,length)
IowKitRead(ioHandle, numPipe,buffer,length)
If buffer\buffer2=255 And flag = 1:z=z+1:flag=0:impuls=0::EndIf
If buffer\buffer2=254:flag=1::EndIf
If buffer\buffer2=255 And sec >0 : sec=0:s2=0:EndIf
SetGadgetText(1, StrU(buffer\buffer2, #PB_Byte))
SetGadgetText(2, StrU(z, #PB_Long))
; IMPLUSE pro SEKUNDE zaehlen - x=1sek Durchlauf
x=x+1
SetGadgetText(3, StrU(s))
If x = 190
impuls=impuls+z: sec=s2
SetGadgetText(8, StrU(impuls))
If sec >0 And impuls>0
SetGadgetText(10, StrU(sec))
umfang=6*3.14 : mm = umfang*impuls
mmsek = mm / sec
cmsek.f = mmsek/100
cmsek87.f=cmsek.f*87
cmh.f=cmsek87.f*360
kmh.f=cmh.f/1000
mph.f=kmh.f/1.66
EndIf
SetGadgetText(13, StrF(cmsek.f,1))
SetGadgetText(15, StrF(kmh.f,1))
SetGadgetText(17, StrF(mph.f,1))
z=0:x=0:s=s+1:s2=s2+1
EndIf
Select EventGadget()
Case 20
z=0:x=0:s=0:s2=0:kmh.f=0:mph.f=0: mm=0: impuls=0:sec=0:flag=0:cmsek.f=0
FreeFont(1):FreeFont(0)
If LoadFont(2, "Arial", 8)
SetGadgetFont(#PB_Default, FontID(2))
EndIf
CloseWindow(0)
Goto start
EndSelect
EndIf
Until event=#PB_Event_CloseWindow
IowKitCloseDevice(iohandle)
End
Hat wer von Euch eine Idee, wie ich exakt eine Sekunde messen kann?
Derzeit habe ich das so hingetrimmt, dass eben ein Zähler so lange addiert wird, bis ein Wert erreicht wurde, der einer Sekunde entspricht.
Ich hätte aber gerne eine exaktere Messung (eine, die immer und überall gleich ist).
Und dann: gibt es nicht eine Möglichkeit, ein Programm aus sich selbst heraus neu zu starten -
so das halt alle Werte auf 0 gesetzt, bzw. gelöscht werden, wie bei einem Neustart?