PureBoard
http://forums.purebasic.com/german/

IO-Warrior
http://forums.purebasic.com/german/viewtopic.php?f=17&t=2632
Seite 2 von 2

Autor:  ozoffi [ 29.05.2011 17:41 ]
Betreff des Beitrags:  Re: IO-Warrior

Hallo!

Wen es interessiert, ich habe nun mein testprogramm erfolgreich erstellt:

Code:
; 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



Es werkt vorerst so, wie ich mir das vorstelle - fast...

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?

Seite 2 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/