Seite 1 von 1

PureBasic und Buggy mit Webcam Teil 2

Verfasst: 07.10.2007 16:18
von mpz
Hallo Leute,

die nächste Erweiterung ist erreicht:

2x digitale Eingänge (Taster)
8x Port Erweiterung als Ausgang
1x LDR mit AD Wandlung von 10 bit
1x MIC mit AD Wandlung von 10 bit
1 x Motorsteuerung mit zwei Motoren

Auf dem Buggy habe ich eine Webcam montiert. Derzeit verwende ich zwei USB Kabel. Sinnvoll ist hierbei aber eine leichtes USB Kabel selberlöten (benötigt nur 4 Adern) ein kleiner USB Hub noch auf den Buggy montiert und den Buggy und die Webcam daran anschließen. Wer es möchte kann es auch mit einem Funk USB Hub betreiben. Dann ist man "wirklich" unabhängig.

Jetzt beschäftige ich mich erst einmal mit der Übertragung von Daten per Internet inclusive WebCam streaming. Hilfe nehme ich gerne entgegen...

Habt Spaß :allright:
Michael

Funk USB Hub:
http://www.chip.de/news/c1_news_28160633.html

Bild Buggy:
Bild

Bild Programmoberfläche:
Bild

Code: Alles auswählen

; "MPZ Buggy Faehrt und sieht.pb"
; 
; PowerBasic Example um ein Formel Flowcode Buggy von www.matrixmultimedia.com als 
; Fahrzeug mit Webcam untesrstützung anzusteuern. Das Gerät wird auch von Elektor vertrieben 
; Der PIC 18F4455 besitzt unter anderem 35x I/O´s und 13x 10bit AD´s
; Dieses Programm wird erweitert und erlaubt derzeit:
;                                         2x digitale Eingänge (Taster)
;                                         8x digitalen Ausgängen  
;                                         1x LDR mit AD Wandlung von 10 bit
;                                         1x MIC mit AD Wandlung von 10 bit
;                                         2x Steuerung der beiden Motoren 
;
; PowerBasic Example to use a PIC Formel Flowcode Buggy from www.matrixmultimedia.com as 
; car with Webcam. 
; The PIC 18F4455 has 35x I/O´s and 13x 10bit AD´s
; This Program will updated and has now:
;                          2x digital Inputs 
;                          8x digital Outputs  
;                          1x LDR input with 10 bit resulution
;                          1x MIC input with 10 bit resulution
;                          2x Control of Motorspeed
;  
; Version 1.00 by MPZ Okt.2007
; for PB 4.10 beta3
; 
; benötigt wird die mcHID.dll von der Firma Mecanique. Die mcHID Library ist 
; Bestandteil der EasyHID Software:
; You need the mcHID.dll from the company Mecanique. The mcHID Library is included
; in the EasyHID Software:
; http://www.mecanique.co.uk/software/EasyHID.zip 
;
; Ein direkter Download der DLL ist über den folgenden Link möglich
; Direct download link 
; http://www.docpro.com.br/arquivos/mcHID.zip
;
; Definierte Übergabeparameter
;
;
; Wert Übergabeparameter Funktion 

;  Wert
;  1  2  3  4  5  6  7  8
;  a  b  c  d  e  f  g  h

;  Daten PIC -> PC
;  a = 1    Daten PIC -> PC
;  b,c      AD8(x*256+y) ; MIC - AD Wandlung (10 bit, ADC 8)
;  d,e      AD9(x*256+y) ; LDR - AD Wandlung (10 bit, ADC 9)
;  f        Taster 1 (Bit 1 of f) / Taster 2 (Bit 2 of f)
;  in Vorbereitung
;  g,h      I2C Bus (a,b); Empfangen von I2C Bus Daten

;  Daten PC -> PIC
;  a = 13   PC -> PIC
;  b        8 fach Output 
;  e        Motor links (x) ; Geschwindigkeit in -100% bis +100% = Wert 0 - 255
;  f        Motor rechts (x) ; Geschwindigkeit in -100% bis +100% = Wert 0 - 255
;  in Vorbereitung
;  c        Servo 1 out(x) ; Einstellwert eines Servos in 0-100%
;  d        Servo 2 out(x) ; Einstellwert eines Servos in 0-100%
;  g,h      I2C Bus (a,b); Senden von I2C Bus Daten

; Wer eine Steuerung über Funk mag: 
; http://www.chip.de/news/c1_news_28160633.html -> Funk USB
 
Enumeration
  #Window_0
  #Text_Status
  #Text_DIGI_IN
  #Listview_INPUT
  #Text_LDR
  #Analog_LDR
  #Text_MIC
  #Analog_MIC
  #Text_OUT
  #Button_OUT1
  #Button_OUT2
  #Button_OUT3
  #Button_OUT4
  #Button_OUT5
  #Button_OUT6
  #Button_OUT7
  #Button_OUT8
  #Speed_Text
  #Speed_Left
  #Speed_Right
  #Speed_Vor
  #Speed_Links
  #Speed_Rechts
  #Speed_Zurueck
  #Speed_Tasten  
EndEnumeration


; Global

;{/ Globale Variablen
Global pVendorID.l, pProductID.l, DeviceHandle.l, ProductName.s
Global USB_HID.l,DIGITAL_OUT.b, Button_1.b, Button_2.b
Global Dim BufferIn.b( 8 ),Dim BufferOut.b( 8 )

#WM_APP = 32768
#WM_HID_EVENT = #WM_APP + 200
#NOTIFY_PLUGGED = 1
#NOTIFY_UNPLUGGED = 2
#NOTIFY_CHANGED = 3
#NOTIFY_READ = 4

#VendorID = 6017    ; Vendor ID "MPZ USB BUGGY"
#ProductID = 2001   ; ProductID "MPZ USB BUGGY"

ProductName.s = Space(256) 

#WM_CAP_START = #WM_USER 
#WM_CAP_SET_CALLBACK_ERROR = #WM_CAP_START + 2 
#WM_CAP_SET_CALLBACK_STATUS = #WM_CAP_START + 3 
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4 
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5 
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6 
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7 
#WM_CAP_DRIVER_CONNECT = #WM_USER + 10 
#WM_CAP_DRIVER_DISCONNECT = #WM_USER + 11 
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14 
#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41 
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42 
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43 
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50 
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52 
#WM_CAP_GET_STATUS = #WM_CAP_START + 54 
#WM_CAP_FILE_SAVEDIB = #WM_USER + 25 
#WM_CAP_SET_SCALE = #WM_USER + 53 
#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85 

#TrackBar_Resolution = 12
;}

Procedure Open_Window_0()
  hWnd = OpenWindow(#Window_0, 310, 185, 391, 472, "MPZ USB BUGGY Interface mit Webcam",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
  If hWnd
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_Status, 135, 10, 120, 20, "No Device", #PB_Text_Center | #PB_Text_Border)
      TextGadget(#Text_DIGI_IN, 30, 40, 330, 12, "DIGITAL IN 1 - IN 2 / TIME", #PB_Text_Center)
      ListViewGadget(#Listview_INPUT, 30, 56, 330, 50)
      TextGadget(#Text_LDR, 30, 110, 330, 12, "LDR INPUT", #PB_Text_Center)
      ProgressBarGadget(#Analog_LDR, 30, 130, 330, 20, 0, 1024, #PB_ProgressBar_Smooth)
      TextGadget(#Text_MIC, 30, 153, 330, 12, "MIC INPUT", #PB_Text_Center)
      ProgressBarGadget(#Analog_MIC, 30, 170, 330, 20, 0, 1024, #PB_ProgressBar_Smooth)
      TextGadget(#Text_OUT, 20, 200, 350, 20, "DIGITAL OUT 1 - OUT8", #PB_Text_Center)
      ButtonGadget(#Button_OUT1, 20, 220, 40, 30, "OUT 1", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT2, 65, 220, 40, 30, "OUT 2", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT3, 110, 220, 40, 30, "OUT 3", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT4, 155, 220, 40, 30, "OUT 4", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT5, 200, 220, 40, 30, "OUT 5", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT6, 245, 220, 40, 30, "OUT 6", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT7, 290, 220, 40, 30, "OUT 7", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#Button_OUT8, 335, 220, 40, 30, "OUT 8", #PB_Button_Default | #PB_Button_Toggle)

      TextGadget    (#Speed_Text, 15, 260, 250, 30, "Motor Speed"+Chr(13)+"Left      Right", 0)
      TrackBarGadget(#Speed_Left, 15, 290, 20, 170, 0, #TrackBar_Resolution, #PB_TrackBar_Vertical|#PB_TrackBar_Ticks)
      SetGadgetState(#Speed_Left, #TrackBar_Resolution / 2)
      TrackBarGadget(#Speed_Right, 55, 290, 20, 170, 0, #TrackBar_Resolution, #PB_TrackBar_Vertical|#PB_TrackBar_Ticks)
      SetGadgetState(#Speed_Right, #TrackBar_Resolution / 2)

      TextGadget    (#Speed_Tasten, 305, 260, 250, 80, "Tastenbelegung"+Chr(13)+Chr(13)+"Vorwärts:    W"+Chr(13)+"Rückwärts: S"+Chr(13)+"Links:          A"+Chr(13)+"Rechts:       D", 0)


  
      
     EndIf
     If OpenLibrary(0, "AVICAP32.DLL") 

          hWebcam = CallFunction(0, "capCreateCaptureWindowA", "", #WS_VISIBLE + #WS_CHILD, 95, 260, 200, 200, hwnd, 0) 
          SendMessage_(hWebcam, #WM_CAP_DRIVER_CONNECT , 0 , 0) 
          SendMessage_(hWebcam, #WM_CAP_SET_SCALE , 1 , 0) 
          SendMessage_(hWebcam, #WM_CAP_SET_PREVIEWRATE , 1 , 0) 
          SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW , 1 , 0) 
          SendMessage_(hwebcam, #WM_CAP_FILE_SAVEDIB , 1 , 0) 
     EndIf     
     ProcedureReturn 1
  EndIf
EndProcedure

;{/ DLL LIB

Prototype  hidConnect (pHostWin.l); As Boolean
Prototype  hidDisconnect (); As Boolean
Prototype  hidRead (pHandle.l, pData.b); As Boolean
Prototype  hidWrite (pHandle.l, pData.b); As Boolean
Prototype  hidReadEx (pVendorID.l, pProductID.l, pData.b); As Boolean
Prototype  hidWriteEx (pVendorID.l, pProductID.l, ByRef.b); As Boolean
Prototype  hidGetVendorName (pHandle.l, pText.s, pLen.l); As Long
Prototype  hidGetProductName (pHandle.l, pText.s, pLen.l); As Long
Prototype  hidGetSerialNumber (pHandle.l, pText.s, pLen.l); As Long
Prototype  hidGetVendorID (pHandle.l); As Long
Prototype  hidGetProductID (pHandle.l); As Long
Prototype  hidGetVersion (pHandle.l); As Long
Prototype  hidGetInputReportLength (pHandle.l); As Long
Prototype  hidGetOutputReportLength (pHandle.l); As Long
Prototype  hidGetHandle (pVendoID.l, pProductID.l); As Long
Prototype  hidGetItem (pIndex.l); As Long
Prototype  hidGetItemCount (); As Long
Prototype  hidSetReadNotify (pHandle.l, pValue.b);
Prototype  hidIsReadNotifyEnabled (pHandle.l); As Boolean
Prototype  hidIsAvailable (pVendorID.l, pProductID.l);  As Boolean


Define mcHID_DLL.l = OpenLibrary(#PB_Any, "mcHID.dll") 

If mcHID_DLL 
    Global hidConnect.hidConnect = GetFunction(mcHID_dll,"Connect") ; (ByVal pHostWin As Long) As Boolean
    Global hidDisconnect.hidDisconnect = GetFunction(mcHID_dll,"Disconnect");  () As Boolean
    Global hidRead.hidRead = GetFunction(mcHID_dll,"Read");  (ByVal pHandle As Long, ByRef pData As Byte) As Boolean
    Global hidWrite.hidWrite = GetFunction(mcHID_dll,"Write");  (ByVal pHandle As Long, ByRef pData As Byte) As Boolean
    Global hidReadEx.hidReadEx = GetFunction(mcHID_dll,"ReadEx");  (ByVal pVendorID As Long, ByVal pProductID As Long, ByRef pData As Byte) As Boolean
    Global hidWriteEx.hidWriteEx = GetFunction(mcHID_dll,"WriteEx");  (ByVal pVendorID As Long, ByVal pProductID As Long, ByRef pData As Byte) As Boolean
    Global hidGetVendorName.hidGetVendorName = GetFunction(mcHID_dll,"GetVendorName");  (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Global hidGetProductName.hidGetProductName = GetFunction(mcHID_dll,"GetProductName");  (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Global hidGetSerialNumber.hidGetSerialNumber = GetFunction(mcHID_dll,"GetSerialNumber");  (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Global hidGetVendorID.hidGetVendorID = GetFunction(mcHID_dll,"GetVendorID");  (ByVal pHandle As Long) As Long
    Global hidGetProductid.hidGetProductid = GetFunction(mcHID_dll,"GetProductID");  (ByVal pHandle As Long) As Long
    Global hidGetVersion.hidGetVersion = GetFunction(mcHID_dll,"GetVersion"); (ByVal pHandle As Long) As Long
    Global hidGetInputReportLength.hidGetInputReportLength = GetFunction(mcHID_dll,"GetInputReportLength");  (ByVal pHandle As Long) As Long
    Global hidGetOutputReportLength.hidGetOutputReportLength = GetFunction(mcHID_dll,"GetOutputReportLength");  (ByVal pHandle As Long) As Long
    Global hidGetHandle.hidGetHandle = GetFunction(mcHID_dll,"GetHandle");  (ByVal pVendoID As Long, ByVal pProductID As Long) As Long
    Global hidGetItem.hidGetItem = GetFunction(mcHID_dll,"GetItem");  (ByVal pIndex As Long) As Long
    Global hidGetItemCount.hidGetItemCount = GetFunction(mcHID_dll,"GetItemCount");  (ByVal pIndex As Long) As Long
    Global hidSetReadNotify.hidSetReadNotify = GetFunction(mcHID_dll,"SetReadNotify"); ByVal pHandle As Long, ByVal pValue As Boolean)
    Global hidIsReadNotifyEnabled.hidIsReadNotifyEnabled = GetFunction(mcHID_dll,"IsReadNotifyEnabled");  (ByVal pHandle As Long) As Boolean
    Global hidIsAvailable.hidIsAvailable = GetFunction(mcHID_dll,"IsAvailable"); (ByVal pVendorID As Long, ByVal pProductID As Long) As Boolean
Else
    MessageRequester("Fehlermeldung", "Das Programm konnte die mcHID.dll Datei nicht öffnen", #PB_MessageRequester_Ok)
    End
EndIf 
;}

ProcedureDLL mcHID_Free(); DLL FREE
  If mcHID_DLL
    CloseLibrary(#PB_Any)
  EndIf
  XLTable_DLL = 0
EndProcedure

;- Window Callback 
Procedure WinProc(hWnd,Msg,wParam,lParam) 
 result = #PB_ProcessPureBasicEvents 
 
 If Msg = #WM_HID_EVENT 
       
       Select wParam
           ; HID device has been plugged message...
        Case #NOTIFY_PLUGGED
           ;HID device has been plugged
           DeviceHandle = hidGetHandle(#VendorID, #ProductID)
           If DeviceHandle
              hidGetProductName (DeviceHandle.l,ProductName,256) 
              SetGadgetText(#Text_Status, ProductName)   

              ; Reset für PIC eingefügt
              BufferOut(0) = 0
              BufferOut(1) = 1
              hidWrite (DeviceHandle.l,@BufferOut()) ; Send Out 
            
           EndIf
        Case #NOTIFY_UNPLUGGED
           ;HID device has unplugged
           DeviceHandle = hidGetHandle(#VendorID, #ProductID)
           If Not DeviceHandle
              SetGadgetText(#Text_Status, "No Device")
           EndIf
        Case #NOTIFY_CHANGED
           ;HID device has been changed
           If DeviceHandle 
              hidSetReadNotify (DeviceHandle, #True) ;read event...
           EndIf
          ;DeviceHandle = hidGetHandle(#VendorID, #ProductID)
          ;hidSetReadNotify (DeviceHandle, #True) ! IMPORTANT ! Read works only With this flag
        Case #NOTIFY_READ
           ; READ works only if the hidSetReadNotify flag is set 
           If hidRead(DeviceHandle, @BufferIn(0))
              ;AddGadgetItem(#Listview_INPUT,0, "Read: "+Str(BufferIn(0)) +"/"+ Str(BufferIn(1))+"/"+Str(BufferIn(2))+"/"+Str(BufferIn(3))+"/"+Str(BufferIn(4))+"/"+Str(BufferIn(5))+"/"+Str(BufferIn(6))+"/"+Str(BufferIn(7))+"/"+Str(BufferIn(8)))

              If BufferIn(1) = 1 ; Taster 1
                 If BufferIn(6) & %01 = 1   
                    If Button_1 = 0 
                        AddGadgetItem(#Listview_INPUT,0, "Button 1 at "+FormatDate("%hh:%ii:%ss", Date()))             
                       Button_1 = 1
                    EndIf
                 Else
                    Button_1 = 0     
                 EndIf                    
                 If BufferIn(6) & %10 = 2 ; Taster 2
                    If Button_2 = 0 
                       AddGadgetItem(#Listview_INPUT,0, "Button 2 at "+FormatDate("%hh:%ii:%ss", Date()))             
                       Button_2 = 1
                    EndIf
                 Else
                    Button_2 = 0     
                 EndIf
                  
                 AD_Wert = BufferIn(2)*256 ; LDR IN
                 If BufferIn(3) > 0 
                    AD_Wert = AD_Wert + BufferIn(3)
                 Else
                    AD_Wert = AD_Wert + 256 + BufferIn(3)
                 EndIf
                 SetGadgetState   (#Analog_LDR,1024-AD_Wert)
                 AD_Wert = BufferIn(4)*256 ; MIC IN
                 If BufferIn(5) > 0 
                    AD_Wert = AD_Wert + BufferIn(5)
                 Else
                    AD_Wert = AD_Wert + 256 + BufferIn(5)
                 EndIf
                 SetGadgetState   (#Analog_MIC,AD_Wert)
              EndIf  
           Else 
              AddGadgetItem(#Listview_INPUT,0, "Read Error!")
           EndIf
        EndSelect
   
   EndIf

  
  ProcedureReturn result 
EndProcedure 

;{ Mainunit
If Open_Window_0()

hidconnect (WindowID(#Window_0))
SetWindowCallback(@WinProc())

  BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
  BufferOut(2) = 0
  BufferOut(5) = 127 
  BufferOut(6
  ) = 127 
  hidWrite (DeviceHandle.l,@BufferOut()) ; Send Out 

  AddKeyboardShortcut(#Window_0, #PB_Shortcut_W, #Speed_Vor)
  AddKeyboardShortcut(#Window_0, #PB_Shortcut_A, #Speed_Links)
  AddKeyboardShortcut(#Window_0, #PB_Shortcut_D, #Speed_Rechts)
  AddKeyboardShortcut(#Window_0, #PB_Shortcut_S, #Speed_Zurueck)

  Repeat
    EventID = WaitWindowEvent()

    Select EventID
  
    Case #PB_Event_Gadget ; Or #PB_Event_Menu 
     
      Select EventGadget() ;Or EventMenu()
          
      Case #Button_OUT1 ; Erweiterungsport Bit 1
          If GetGadgetState(#Button_OUT1)
             DIGITAL_OUTD = DIGITAL_OUTD | %00000001
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %11111110
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Send Out 

      Case #Button_OUT2 ; Erweiterungsport Bit 2
          If GetGadgetState(#Button_OUT2)
             DIGITAL_OUTD = DIGITAL_OUTD | %00000010
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %11111101
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Send Out

      Case #Button_OUT3 ; Erweiterungsport Bit 3
          If GetGadgetState(#Button_OUT3)
             DIGITAL_OUTD = DIGITAL_OUTD | %00000100
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %11111011
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Send Out

      Case #Button_OUT4 ; Erweiterungsport Bit 4
          If GetGadgetState(#Button_OUT4)
             DIGITAL_OUTD = DIGITAL_OUTD | %00001000
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %11110111
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Send Out

      Case #Button_OUT5 ; Erweiterungsport Bit 5
          If GetGadgetState(#Button_OUT5)
             DIGITAL_OUTD = DIGITAL_OUTD | %00010000
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %11101111
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät

      Case #Button_OUT6 ; Erweiterungsport Bit 6
          If GetGadgetState(#Button_OUT6)
             DIGITAL_OUTD = DIGITAL_OUTD | %00100000
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %11011111
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Button_OUT7 ; Erweiterungsport Bit 7
          If GetGadgetState(#Button_OUT7)
             DIGITAL_OUTD = DIGITAL_OUTD | %01000000
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %10111111
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Button_OUT8 ; Erweiterungsport Bit 8
          If GetGadgetState(#Button_OUT8)
             DIGITAL_OUTD = DIGITAL_OUTD | %10000000
          Else
             DIGITAL_OUTD = DIGITAL_OUTD & %01111111
          EndIf
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Speed_Left
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(6) = 127 * (#TrackBar_Resolution - GetGadgetState(#Speed_Left)) / #TrackBar_Resolution / 2
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Speed_Right
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 127 * (#TrackBar_Resolution - GetGadgetState(#Speed_Right)) / #TrackBar_Resolution / 2
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
    EndSelect
    
    Case #PB_Event_Menu 
      Select EventMenu()




      Case #Speed_Vor
          SetGadgetState(#Speed_Left, #TrackBar_Resolution)
          SetGadgetState(#Speed_Right, #TrackBar_Resolution)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 0
          BufferOut(6) = 0
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
          Delay (100)
          SetGadgetState(#Speed_Left, #TrackBar_Resolution / 2)
          SetGadgetState(#Speed_Right, #TrackBar_Resolution / 2)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 127
          BufferOut(6) = 127
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Speed_Links
          SetGadgetState(#Speed_Left, 0)
          SetGadgetState(#Speed_Right, #TrackBar_Resolution)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 0
          BufferOut(6) = 255
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
          Delay (100)
          SetGadgetState(#Speed_Left, #TrackBar_Resolution / 2)
          SetGadgetState(#Speed_Right, #TrackBar_Resolution / 2)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 127
          BufferOut(6) = 127
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Speed_Rechts
          SetGadgetState(#Speed_Left, #TrackBar_Resolution)
          SetGadgetState(#Speed_Right, 0)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 255
          BufferOut(6) = 0
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
          Delay (100)
          SetGadgetState(#Speed_Left, #TrackBar_Resolution / 2)
          SetGadgetState(#Speed_Right, #TrackBar_Resolution / 2)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 127
          BufferOut(6) = 127
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
      Case #Speed_Zurueck
          SetGadgetState(#Speed_Left, 0)
          SetGadgetState(#Speed_Right, 0)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 255
          BufferOut(6) = 255
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät            
          Delay (100)
          SetGadgetState(#Speed_Left, #TrackBar_Resolution / 2)
          SetGadgetState(#Speed_Right, #TrackBar_Resolution / 2)
          BufferOut(0) = 0
          BufferOut(1) = 13 ; Out PortD,(x) ; Ausgabe von PortD
          BufferOut(2) = DIGITAL_OUTD
          BufferOut(5) = 127
          BufferOut(6) = 127
          hidWrite (DeviceHandle.l,@BufferOut()) ; Sende Daten zu einem HID Gerät
    EndSelect

  EndSelect
  
Until EventID = #PB_Event_CloseWindow
  SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW , 0, 0) 
  SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, "BLUBBER", 0)
  CloseWindow(0) 
  CloseLibrary(0) 
  hidDisconnect ()
  mcHID_Free()
EndIf
End
;}
;
Der folgende HEX Code wird einfach mit dem Flow Code Programmer per USB programmiert:

Code: Alles auswählen

;Buggy_Fahren.HEX File wird erstellt
;-----------------------------
If CreateFile(1, "Buggy_Fahren.HEX" )
    Restore StringData
    Repeat
    Read Daten.s
        If Daten.s = "End" : Break : EndIf
        WriteStringN(1,Daten.s)
    ForEver
    CloseFile (1)
EndIf

DataSection
  StringData:
  Data.s ":020000040000FA"
  Data.s ":10080000E9EF0AF0FFFFFFFFFFFFFFFFFFFFFFFF2A"
  Data.s ":10081000E9CF01F0EACF02F0E1CF03F0E2CF04F03C"
  Data.s ":10082000D9CF05F0DACF06F0D4EC08F001C0E9FF2B"
  Data.s ":1008300002C0EAFF03C0E1FF04C0E2FF05C0D9FF28"
  Data.s ":1008400006C0DAFF110004010401376B1E0E716E41"
  Data.s ":100850000401400E096F5B0E0A6F040E0B6F880EC9"
  Data.s ":10086000086F9B0E0E6F040E0F6F0D6B400E0C6F1A"
  Data.s ":100870001200040104012A6B14EE9BF024EE18F020"
  Data.s ":10088000080E2A5D04E2E6CFDEFF2A2BF9D7080E18"
  Data.s ":100890003E6F3F6B1200040104012A6B14EE20F03E"
  Data.s ":1008A00024EE18F0020E2A5D04E2E6CFDEFF2A2BCA"
  Data.s ":1008B000F9D7020E3E6F3F6B12000401800E040157"
  Data.s ":1008C00010634FD0135103082FE0135102080EE0BC"
  Data.s ":1008D0001351010801E044D0010E396F960E3A6FB2"
  Data.s ":1008E000170E3B6F120E3E6F3F6B3AD0010E396F01"
  Data.s ":1008F000450EE16E040EE26E1245E126000EE22284"
  Data.s ":10090000E6CF3AF4E7CF3BF4F86AF76A040E3A25EB"
  Data.s ":10091000F66E3B51F7220900F5CF3EF409000A00BC"
  Data.s ":10092000F5CF3FF40A001CD0010E396F020E12659C"
  Data.s ":1009300002D0030E126F490EE16E040EE26E1245F4"
  Data.s ":10094000E126000EE222E6CF3AF4E7CF3BF43AC4C8"
  Data.s ":10095000F6FF3BC4F7FF0800F5503E6F3F6B00D039"
  Data.s ":10096000348312000401010E0401396F716A726A46"
  Data.s ":10097000736A746A756A766A776A786A796A7A6A73"
  Data.s ":100980007B6A7C6A7D6A7E6A7F6A326B336B12C4D3"
  Data.s ":1009900031F4125103E1050E306F04D0060E306FB2"
  Data.s ":1009A00023EC04F0120004010401186B196B1051C0"
  Data.s ":1009B0001F0B020814E010511F0B01080CE010512E"
  Data.s ":1009C0001F0B000801E02CD0010E0401396F34A187"
  Data.s ":1009D00001D0188325D0010E0401396F21D0010EFA"
  Data.s ":1009E0000401396F14510F0B0800F350296B000FED"
  Data.s ":1009F000286F040E29231451800B01E0010E04001E"
  Data.s ":100A0000F35028253C6F000E29213D6F3CC4E1FFC7"
  Data.s ":100A10003DC4E2FFE750040B02E0010E186F00D066"
  Data.s ":100A2000010E0401396309E1180E3A6F040E3B6FA1"
  Data.s ":100A30003493020E3E6F3F6B00D012000401010E92"
  Data.s ":100A40000401125D0CE110511F0B000808E1010EBA"
  Data.s ":100A5000396F030E115D02E1348101D03491000E33"
  Data.s ":100A60000401125D37E110511F0B020833E11451EC"
  Data.s ":100A70000F0B00082FE0010E396F14510F0B080007"
  Data.s ":100A8000F350296B000F286F040E29231451800B9B"
  Data.s ":100A900001E0010E0400F35028253C6F000E2921CF"
  Data.s ":100AA0003D6F030E115D07E1840E3CC4E1FF3DC4C0"
  Data.s ":100AB000E2FFE76E0FD014AF07D0000E3CC4E1FF99"
  Data.s ":100AC0003DC4E2FFE76E06D0880E3CC4E1FF3DC4A2"
  Data.s ":100AD000E2FFE76E12000401010E0401135D04E061"
  Data.s ":100AE000030E135D10E01AD0000E0401125D04E045"
  Data.s ":100AF000010E125D07E012D0020E0401396F39ECCD"
  Data.s ":100B000004F00CD00BD0000E0401125D01E006D001"
  Data.s ":100B1000020E0401396F4BEC04F000D0180E0401F2"
  Data.s ":100B20003A6F040E3B6F349312000401020E04016D"
  Data.s ":100B3000135D04E0030E135D0EE01AD0000E0401F5"
  Data.s ":100B4000125D01E015D0020E0401396F5B0E3C6F9F"
  Data.s ":100B5000040E3D6F0DD0000E0401125D01E008D0BF"
  Data.s ":100B6000020E0401396F200E3C6F040E3D6F00D061"
  Data.s ":100B700012000401080E04013E5D000E3F5905E21B"
  Data.s ":100B80003EC440F43FC441F404D0080E406F000E50"
  Data.s ":100B9000416F049304914151030B041340C405F4C5"
  Data.s ":100BA00040513E5F41513F5B180E3C6F040E3D6F5C"
  Data.s ":100BB00034A31AD03AC4F6FF3BC4F7FFF86A3CC42A"
  Data.s ":100BC000E1FF3DC4E2FF04014051411105E1F6CFD0"
  Data.s ":100BD0003AF4F7CF3BF41FD00900F5CFE6FF090048"
  Data.s ":100BE000400701E24107EFD73AC4E1FF3BC4E2FF0F"
  Data.s ":100BF0003CC4D9FF3DC4DAFF04014051411105E175"
  Data.s ":100C0000E1CF3AF4E2CF3BF406D0E6CFDEFF400777"
  Data.s ":100C100001E24107F1D71200040104011051600BF9"
  Data.s ":100C2000E842E842E842E842E84200085CE111514B"
  Data.s ":100C30000C0858E01151070855E011510B0846E027"
  Data.s ":100C400011510A0834E0115103082EE01151010836"
  Data.s ":100C50002BE01151000825E01151080816E0115150"
  Data.s ":100C6000090810E0115106080AE01151050801E0D9"
  Data.s ":100C70003AD0010E0401396F040E306F34D05DECB0"
  Data.s ":100C800004F031D0B2EC04F02ED0010E0401396F23"
  Data.s ":100C9000310E3A6F040E3A6F3493010E3E6F3F6B84"
  Data.s ":100CA00022D0D3EC04F01FD01EEC05F01CD0010EB6"
  Data.s ":100CB0000401396F14513A6F3B6B320E3A27040E20"
  Data.s ":100CC0003B233493010E3E6F3F6B0DD0010E0401A8"
  Data.s ":100CD000396FE26A320E1425E16E040EE22212C46C"
  Data.s ":100CE000E7FF01D000D004011200040104011051FB"
  Data.s ":100CF0001F0B010878E11451000875E11151060835"
  Data.s ":100D000001E02AD01351210807E01351220812E014"
  Data.s ":100D1000135123081DE01DD0020E0401396F010E8E"
  Data.s ":100D2000316304D0DE0E3A6F170E3B6F090E3E6F33"
  Data.s ":100D30003F6B0FD0020E0401396F010E316307D0F3"
  Data.s ":100D40000C0E3A6F180E3B6F2F0E3E6F3F6B01D0AB"
  Data.s ":100D500000D00401348300D004011051600BE8423C"
  Data.s ":100D6000E842E842E842E84201083DE111510B083F"
  Data.s ":100D700034E01151030825E011510A081CE011511B"
  Data.s ":100D800002080DE01151090807E01151010801E0C6"
  Data.s ":100D90002AD06BEC05F027D095EC05F024D0020E9C"
  Data.s ":100DA0000401396F350E3A6F040E3B6F3493010E18"
  Data.s ":100DB0003E6F3F6B18D0020E0401396F1351356F2F"
  Data.s ":100DC00012D0020E0401396F360E3A6F040E3B6FDB"
  Data.s ":100DD0003493010E3E6F3F6B06D0020E0401396F53"
  Data.s ":100DE0001251366F00D0040112000401000E0401FC"
  Data.s ":100DF00039630AD0080E016F100E026F040E036FE4"
  Data.s ":100E0000840E006F046F30D0040110AF1ED00401B7"
  Data.s ":100E10003E51165D3F51175904E216C43EF417C403"
  Data.s ":100E20003FF4B9EC05F0010E0401386F080E016FB4"
  Data.s ":100E3000100E026F040E036F800E006F180E066F07"
  Data.s ":100E4000040E076FC80E046F0FD0020E0401386F36"
  Data.s ":100E5000056BC80E046F080E016F180E026F040EAA"
  Data.s ":100E6000036FC80E006F00D06D9800D0120004010F"
  Data.s ":100E7000030E04010015436F01C442F442513E27A2"
  Data.s ":100E800043513F23180E3A6F040E3B6F3AC4E1FF03"
  Data.s ":100E90003BC4E2FF3CC4D9FF3DC4DAFF0401425128"
  Data.s ":100EA000431105E1E1CF3AF4E2CF3BF406D0E6CFBF"
  Data.s ":100EB000DEFF420701E24307F1D712000401020EF0"
  Data.s ":100EC0000401135D04E0030E135D17E020D0000E53"
  Data.s ":100ED0000401125D01E01BD004012A6B14EE5BF0EB"
  Data.s ":100EE00024EE9BF0080E2A5D04E2E6CFDEFF2A2BFB"
  Data.s ":100EF000F9D7080E3E6F3F6B0AD0000E0401125D59"
  Data.s ":100F000001E005D0020E04013E6F3F6B00D01200DD"
  Data.s ":100F10000401000E0401386F080E016F100E026FFD"
  Data.s ":100F2000040E036F880E006F000E046F12000401A0"
  Data.s ":100F3000000E0401386F000E396F3E6B3F6B0CECF6"
  Data.s ":100F400006F0000E0401396302D075EC06F0F5ECF2"
  Data.s ":100F500006F012000401020E0401386311D037ECD0"
  Data.s ":100F600007F0020E0401396302D05EEC07F00401C1"
  Data.s ":100F700000BD03D0C80E006F02D0880E006F03D0F2"
  Data.s ":100F800088EC07F000D012000401040E0401306365"
  Data.s ":100F900009D012C46EFF6E5003E0050E306F02D010"
  Data.s ":100FA000030E306F010E040138630BD0B9EC05F06D"
  Data.s ":100FB000040104BD03D0C80E046F02D0880E046F74"
  Data.s ":100FC00003D088EC07F000D0120004010401376B55"
  Data.s ":100FD00008BF1BD009512C6502D009C42CF4376B13"
  Data.s ":100FE00014EE5BF02DC4D9FF2EC4DAFF2C51375D0F"
  Data.s ":100FF00004E2E6CFDEFF372BF9D7400E096F400E33"
  Data.s ":101000000817087D880E081300D00401375112001C"
  Data.s ":1010100004016D9269946894120004016A6A686A16"
  Data.s ":101020009F0E6B6E3B0E696E6E6A716A726A736AAE"
  Data.s ":10103000746A756A766A776A786A796A7A6A7B6AA4"
  Data.s ":101040007C6A7D6A7E6A7F6A160E706E68A602D020"
  Data.s ":101050006896FCD76D9888EC07F004013491316BE9"
  Data.s ":10106000030E306F12000401698468986D821200CB"
  Data.s ":101070000401689C1200040170A003D088EC07F002"
  Data.s ":101080007090689A120004016892120004017C0EAC"
  Data.s ":101090006C1404012F6F000E2F6301D005D0040ED5"
  Data.s ":1010A0002F6301D00ED010D0040100513C0BE84258"
  Data.s ":1010B000E8420D0803E197EC07F002D0AAEC07F034"
  Data.s ":1010C00003D0C4EC07F000D0120004017C0E6C14B5"
  Data.s ":1010D00004012F6F080E2F6301D005D00C0E2F6373"
  Data.s ":1010E00001D00DD00DD057C42DF458C42EF4080EE5"
  Data.s ":1010F00004012C6FE5EC07F00401446F01D000D02F"
  Data.s ":101100001200E9CF51F4EACF52F4E1CF53F4E2CF29"
  Data.s ":1011100054F4D9CF55F4DACF56F40401000E04018B"
  Data.s ":10112000306301D034D069A404D068A402D008ECA4"
  Data.s ":1011300008F06DB22CD069A004D068A002D00DECEC"
  Data.s ":1011400008F069A804D068A802D033EC08F069ACB4"
  Data.s ":1011500004D068AC02D038EC08F069AA04D068AAC0"
  Data.s ":1011600002D03BEC08F069A204D068A202D043ECA4"
  Data.s ":1011700008F0030E0401306101D009D069A607D040"
  Data.s ":1011800068A605D046EC08F065EC08F0689656C4F1"
  Data.s ":10119000DAFF55C4D9FF54C4E2FF53C4E1FF52C47F"
  Data.s ":1011A000EAFF51C4E9FF1200A0AA05D0A1AA03D00A"
  Data.s ":1011B00081EC08F0A19A12003F0E566EFF0E556E9C"
  Data.s ":1011C000562E01D003D0552EFED7FAD72B0E556ED2"
  Data.s ":1011D000552EFED70000000012002B0E556E552E26"
  Data.s ":1011E000FED70000000012001F0E576EFF0E566E55"
  Data.s ":1011F000FF0E556E572E01D007D0562E01D003D0CA"
  Data.s ":10120000552EFED7FAD7F6D7980E566EFF0E556EAE"
  Data.s ":10121000562E01D003D0552EFED7FAD79D0E556E0F"
  Data.s ":10122000552EFED700000000120004016DB612001A"
  Data.s ":10123000140E6F6E000E0401306F346B316B6D6AEB"
  Data.s ":10124000696A6D86010E306FDCEC08F06DBA06D06D"
  Data.s ":10125000686A696A69806988020E0401306F120049"
  Data.s ":101260001200C26A070EC012C08E26C04BF04B3669"
  Data.s ":101270004B904B364B904B50C212C280EDEC08F0B5"
  Data.s ":10128000C2824D6AC2B24D2A4D50010A02E10000ED"
  Data.s ":10129000F8D7C4CF4DF0000E4E6E4DC04EF04D6AE3"
  Data.s ":1012A0004DC027F04EC028F0C3504D10276E4EC0E1"
  Data.s ":1012B00028F0000E2812C29027C04BF028C04CF036"
  Data.s ":1012C0001200040104010CBFFED7400E2C6502D0B1"
  Data.s ":1012D000400E2C6F2A6B2DC4E1FF2EC4E2FF24EEDA"
  Data.s ":1012E0009BF02C512A5D04E2E6CFDEFF2A2BF9D7D2"
  Data.s ":1012F00004012CC40DF4400E0C170C7D880E0C1349"
  Data.s ":1013000012000001566A556A546A4B504F02F4CFDE"
  Data.s ":1013100054F0F3CF53F04C505002F4CF56F0F3CFCB"
  Data.s ":1013200055F04B505002F3505426F4505522E86AC1"
  Data.s ":1013300056224C504F02F3505426F4505522E86A7E"
  Data.s ":10134000562253C04BF054C04CF055C04DF056C01F"
  Data.s ":101350004EF0120004016DA612006D6A696A000E5B"
  Data.s ":101360000401306F1200F26AF50EF16EC00EF06EDD"
  Data.s ":10137000D09E9D6AA06A9E6AA16A0F0EC112FF0EDE"
  Data.s ":10138000926EFF0E936EFF0E946E956A070E966E28"
  Data.s ":10139000896A8A6A8B6A8C6A8D6A120004EE00F090"
  Data.s ":1013A000050EEE6AEA62FDD7F4EC08F00401BA0E0D"
  Data.s ":1013B0000401456F170E466FBA0E476F170E486F40"
  Data.s ":1013C0006A0E496F180E4A6F720E4B6F180E4C6FF3"
  Data.s ":1013D000960E4D6F180E4E6FCE0E4F6F180E506F4B"
  Data.s ":1013E00022C057F423C058F424C059F425C05AF43D"
  Data.s ":1013F00015EC09F0A19AA08AF28CF28E1200949456"
  Data.s ":10140000CA840C0EBD1212009492CA840C0EBA1239"
  Data.s ":1014100012009386090E266E31EC09F04BC022F0C3"
  Data.s ":101420004CC023F022C04BF023C04CF01200938438"
  Data.s ":10143000080E266E31EC09F04BC022F04CC023F0B0"
  Data.s ":1014400022C04BF023C04CF012004C6A04010CBFC8"
  Data.s ":101450004C2A4C50000A02E0256A0CD0A09A22C007"
  Data.s ":101460002DF423C02EF424C02CF461EC09F0A08AE2"
  Data.s ":10147000010E256E25C04BF01200226AA09A0401CD"
  Data.s ":10148000060E0401306101D008D06DB206D044537D"
  Data.s ":1014900004E044C44BF0446B04D04B6A0401446B39"
  Data.s ":1014A00000D0A08A120022C04BF01200CBCF4BF02C"
  Data.s ":1014B000000E4C6E010E4B244F6E000E4C20506EF1"
  Data.s ":1014C00022C04BF0000E4C6E81EC09F0060E4D6E02"
  Data.s ":1014D0004BC053F04CC054F04D5005E054325332E1"
  Data.s ":1014E000549EFF0FFAD753C04BF054C04CF04B360C"
  Data.s ":1014F0004B904C364B364B904C364B364B904C36D3"
  Data.s ":101500004B364B904C36300E4B14516E4CC052F053"
  Data.s ":10151000000E521653C04BF054C04CF04C324B32BC"
  Data.s ":101520004C9E4C324B324C9E4BC0BEFF0F0EBD1634"
  Data.s ":101530005150BD121200CBCF4BF0000E4C6E010E7D"
  Data.s ":101540004B244F6E000E4C20506E22C04BF0000E0C"
  Data.s ":101550004C6E81EC09F0060E4D6E4BC053F04CC042"
  Data.s ":1015600054F04D5005E054325332549EFF0FFAD7D9"
  Data.s ":1015700053C04BF054C04CF04B364B904C364B366E"
  Data.s ":101580004B904C364B364B904C364B364B904C3642"
  Data.s ":10159000300E4B14516E4CC052F0000E521653C018"
  Data.s ":1015A0004BF054C04CF04C324B324C9E4C324B32D0"
  Data.s ":1015B0004C9E4BC0BBFF0F0EBA165150BA12120010"
  Data.s ":1015C000AAEC09F0A19AA09A1200BE6ABD98BD9A31"
  Data.s ":1015D0001200B3EC09F0070E226E000E236E0F0E00"
  Data.s ":1015E000246E000E256ECEEC09F0CA80CA824A0E27"
  Data.s ":1015F000CB6EE5EC0AF0FFEC09F004EC0AF0010E0A"
  Data.s ":101600000F6E09EC0AF04BC017F04CC018F04CC03C"
  Data.s ":101610004FF0506A4FC010F04BC011F017EC0AF0B9"
  Data.s ":101620004BC019F04CC01AF04CC04FF0506A4FC07C"
  Data.s ":1016300012F04BC013F04F6A81B84F2A4F50010A85"
  Data.s ":1016400002E1148002D0020E14164F6A81BA4F2AAA"
  Data.s ":101650004F50010A02E1148202D0010E14160F0E3F"
  Data.s ":10166000226E000E236E080E246E25EC0AF03DEC6F"
  Data.s ":101670000AF04BC000F01B6A00501B5CD8B089D048"
  Data.s ":1016800007C01CF008C01DF00BC01EF00CC01FF0FE"
  Data.s ":1016900007500D0AD8A47BD0010E1D144B6E4B527F"
  Data.s ":1016A00003E0838055EF0BF08390020E1D144F6E04"
  Data.s ":1016B0004F50020A03E183825FEF0BF08392040E26"
  Data.s ":1016C0001D144F6E4F50040A03E1838469EF0BF041"
  Data.s ":1016D0008394080E1D144F6E4F50080A03E1838651"
  Data.s ":1016E00073EF0BF08396100E1D144F6E4F50100ABF"
  Data.s ":1016F00003E183887DEF0BF08398200E1D144F6E5D"
  Data.s ":101700004F50200A03E1838A87EF0BF0839A400E43"
  Data.s ":101710001D144F6E4F50400A03E1838C91EF0BF084"
  Data.s ":10172000839C800E1D144F6E4F50800A03E1838E00"
  Data.s ":101730009BEF0BF0839EFC0E9616800E1E144F6ED0"
  Data.s ":101740004F50800A08E184921EC022F02236229077"
  Data.s ":1017500056EC0AF007D084821EC022F02236229076"
  Data.s ":1017600056EC0AF0800E1F144F6E4F50800A08E1AD"
  Data.s ":1017700084901FC022F0223622909BEC0AF007D002"
  Data.s ":1017800084801FC022F0223622909BEC0AF01B2A94"
  Data.s ":1017900073D735D7FFD71200010000000200000008"
  Data.s ":1017A00000000000080081001700D10007000100C0"
  Data.s ":1017B00000000100020000000100090002002900F1"
  Data.s ":1017C0000000010001000000A00032000900040038"
  Data.s ":1017D00000000000020003000000000000000900FB"
  Data.s ":1017E0002100010001000000010022002F00000084"
  Data.s ":1017F00007000500810003004000000014000700FE"
  Data.s ":101800000500010003004000000014000600A000D5"
  Data.s ":10181000FF0009000100A1000100090003001500FC"
  Data.s ":10182000000026000000FF00750008009500080079"
  Data.s ":1018300081000200090004001500000026000000DD"
  Data.s ":10184000FF007500080095000800910002000900E3"
  Data.s ":1018500005001500000026000000FF0075000800CC"
  Data.s ":1018600095000200B1000200C0000400030009005E"
  Data.s ":101870000400120003004D000000500000005A0058"
  Data.s ":10188000000020000000460000004100000043006E"
  Data.s ":101890000000540000001C0003004D000000500038"
  Data.s ":1018A00000005A0000002000000055000000530016"
  Data.s ":1018B000000042000000200000004200000055002F"
  Data.s ":1018C000000047000000470000005900000002002F"
  Data.s ":1018D0000300FFFFFFFFFFFFFFFFFFFFFFFFFFFF13"
  Data.s ":020000040030CA"
  Data.s ":0E000000E03EFFFEFFF99BFFFFFFFFBFFFFF8B"
  Data.s ":00000001FF"
  Data.s "End"

Verfasst: 09.10.2007 08:44
von super_castle
mensch kauf dir eine farb-funk-cam, die ist halb so groß, bekommst du schon für 45 euro. habe ich auf meinen robby(2x atmega32) und steuere ihn auch mit einer selbsterstellten gui in purebasic. die datenauswertung der hindernisse macht purebasic und dann sende ich über funk serielle daten zum robby zum reagieren. die serielle schnittstelle funkt mir auch alle motordaten zum pc usw.

ich komme ganz ohne firmenware aus, alles selbst geschrieben mit bascom für den mega.

mfg

Verfasst: 10.10.2007 16:34
von mpz
Hi,

erst einmal freu ich mich das auch andere sich mit dem Thema Robotik beschäftigen. Warum ich hier diese Sachen veröffendliche ist der Wunsch das auch "nicht Elektroniker" diese Technik nachvollziehen können und/oder einfach nachbauen.

Deine Idee mit der Funkkamera ist gut. Du kannst doch mal ein Produkt als Beipiel nennen und schildern wie Du die Wandlung an dem PC (Analog Video in digitales Video PC Signal) vornimmst. Sicherlich einfacher als über ein TV Karte ?!? Deine Datenauswertung der Kamerasignale ist eine weitere wichtige Sache. Zeig uns doch einmal ein Beispiel wie Du dieDatenauswertung der Hindernisse vornimmst. Ich nehme dann gerne die Anpassung an den Buggy vor. Vielleicht hat der Eine oder Andere auch Ideen die er beisteuern möchte...

Gruß Michael

Verfasst: 14.10.2007 18:12
von super_castle
ich lese ein funkvideobild mit capture ein und dann kann ich mich mit purebasic austoben und etwas schreiben, wo man denn meint, welche pixeldaten man in dem purebasicsreen auswerten soll. da gibe es verschiedene kunstgriffe.

Code: Alles auswählen

Global hwnd

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Frame3D_0
  #Frame3D_1
  #Button_0
EndEnumeration

Enumeration
  #ImageGadget_0
EndEnumeration

Procedure Open_Window_0()
  hwnd = OpenWindow(#Window_0, 0, 0, 780, 350,"test",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
  CreateGadgetList(WindowID(0))
  ButtonGadget(#Button_0, 20, 40, 65, 25, "schnapp")
EndProcedure 

#WM_CAP_START = #WM_USER
#WM_CAP_SET_CALLBACK_ERROR = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_STATUS = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7
#WM_CAP_DRIVER_CONNECT = #WM_CAP_START + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_CAP_START + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14
#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_GET_STATUS = #WM_CAP_START + 54
#WM_CAP_FILE_SAVEDIB = #WM_CAP_START + 25
#WM_CAP_SET_SCALE = #WM_CAP_START + 53
#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85
#WM_CAP_EDIT_COPY = #WM_CAP_START + 30
#WM_CAP_GRAB_FRAME = #WM_CAP_START+60

Open_Window_0()
OpenLibrary(0, "AVICAP32.DLL")

hRobby = CallFunction(0, "capCreateCaptureWindowA", "BLUBBER", #WS_VISIBLE + #WS_CHILD, 120, 30, 310, 300, hWnd, 0)
SendMessage_(hRobby, #WM_CAP_DRIVER_CONNECT, 0 , 0)
SendMessage_(hRobby, #WM_CAP_SET_SCALE , 1 , 0)
SendMessage_(hRobby, #WM_CAP_SET_PREVIEWRATE, 50, 0)
SendMessage_(hRobby, #WM_CAP_SET_PREVIEW, 1 , 0)

Repeat ; Start of the event loop
 
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
 
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
 
  GadgetID = EventGadget() ; Is it a gadget event?
 
  EventType = EventType() ; The event type
  
  SendMessage_(hRobby, #WM_CAP_GRAB_FRAME, 0 , 0) 
 
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0
      SendMessage_(hRobby, #WM_CAP_GRAB_FRAME, 0 , 0)
      SendMessage_(hRobby, #WM_CAP_EDIT_COPY, 0 , 0)
      Link = GetClipboardImage(#PB_Clipboard_Image)
      If Link <> 0        
        StartDrawing( WindowOutput(0) )
        DrawImage(Link, 440,30,300, 300) 
        StopDrawing()
      EndIf
    EndIf
    
  EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop

SendMessage_(hRobby, #WM_CAP_SET_PREVIEW, 0, 0)
SendMessage_(hRobby, #WM_CAP_DRIVER_DISCONNECT, "BLUBBER", 0)
CloseWindow(0)
CloseLibrary(0) 
; IDE Options = PureBasic v4.01 (Windows - x86)
; CursorPosition = 57
; FirstLine = 28