[Spezial] USB-Gerät ansprechen

  • Ja genau so heißen die. Danke.

    Gut backt to Topic.

    Kann mir wer helfen? Hab ich nen Fehler im meinem Tool?

    Hier ein neuer Code (hab ihn oben auch geändert):


    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;#AutoIt3Wrapper_Icon=shutdown.ico
    #AutoIt3Wrapper_Res_Comment=Ein Programm von HDW-Computer-Forum http://www.hdw-computer-forum.de
    #AutoIt3Wrapper_Res_Description=by Michi26206
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=by HDW-Computer-Forum
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs -----------------------------------------------------------------------------------------------------------------------------

    USB-LED.exe (C) by Michi26206 - Programm zu, schalten einer LED über Computer

    #ce -----------------------------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUICloseOnESC", 1) ; ESC drücken beendet Programm nicht
    ;Opt("TrayAutoPause", 0) ; das Script nicht pausieren, wenn auf das Tray-Icon geklickt wird
    ;Opt("TrayMenuMode", 1) ; kein Defaul-Tray-Menu
    Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden

    [/autoit] [autoit][/autoit] [autoit]

    Global $Maindialog, $title="USB-LED", $version="1.0.0.0", $nMsg, $COMopen
    Dim $LED[3][3]

    [/autoit] [autoit][/autoit] [autoit]

    $COMopen = DllCall("ftd2xx.dll", "int", "FT_OPEN", "hwnd", 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Maindialog = GUICreate($title & " " & $version, 200, 200, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $LED[1][1] = GUICtrlCreateButton("LED ein", 70, 140, 60, 25, 0)
    $LED[1][2] = GUICtrlCreateLabel("LED ein", 65, 60, 100, 25)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetfont($LED[1][2], 15)
    GUICtrlSetColor($LED[1][2], 0x006600)
    $LED[2][1] = GUICtrlCreateButton("LED aus", 70, 140, 60, 25, 0)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    $LED[2][2] = GUICtrlCreateLabel("LED aus", 65, 60, 100, 25)
    GUICtrlSetFont($LED[2][2], 15)
    GUICtrlSetColor($LED[2][2], 0xCC0000)
    GUISetState(@SW_SHOW, $Maindialog)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $LED[1][1]
    manage_view("ein")
    Case $LED[2][1]
    manage_view("aus")
    DllCall("ftd2xx.dll", "int", "FT_ClrRts", "hwnd",0)
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func manage_view($art)
    Switch $art
    Case "ein"
    GUICtrlSetState($LED[2][1], $GUI_SHOW)
    GUICtrlSetState($LED[2][2], $GUI_HIDE)
    GUICtrlSetState($LED[1][1], $GUI_HIDE)
    GUICtrlSetState($LED[1][2], $GUI_SHOW)
    Case "aus"
    GUICtrlSetState($LED[1][1], $GUI_SHOW)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    GUICtrlSetState($LED[2][2], $GUI_SHOW)
    EndSwitch
    EndFunc ;==>mange_view

    [/autoit]

    Michi26206

  • Da sind einige Fehler. Du musst die DLL mit DLLopen öffnen, den Funktionen immer die passenden Parameter mitgeben usw ;)

    Spoiler anzeigen
    [autoit]


    Global Const $FT_STATUS = "ulong"

    [/autoit] [autoit][/autoit] [autoit]

    Global Enum $FT_OK, _
    $FT_INVALID_HANDLE, _
    $FT_DEVICE_NOT_FOUND, _
    $FT_DEVICE_NOT_OPENED, _
    $FT_IO_ERROR, _
    $FT_INSUFFICIENT_RESOURCES, _
    $FT_INVALID_PARAMETER, _
    $FT_INVALID_BAUD_RATE, _
    $FT_DEVICE_NOT_OPENED_FOR_ERASE, _
    $FT_DEVICE_NOT_OPENED_FOR_WRITE, _
    $FT_FAILED_TO_WRITE_DEVICE, _
    $FT_EEPROM_READ_FAILED, _
    $FT_EEPROM_WRITE_FAILED, _
    $FT_EEPROM_ERASE_FAILED, _
    $FT_EEPROM_NOT_PRESENT, _
    $FT_EEPROM_NOT_PROGRAMMED, _
    $FT_INVALID_ARGS, _
    $FT_NOT_SUPPORTED, _
    $FT_OTHER_ERROR, _
    $FT_DEVICE_LIST_NOT_READY, _

    [/autoit]
    Spoiler anzeigen
    [autoit]


    Global $hFTDdll = DLLOpen("ftd2xx.dll")
    Func FT_Open($iDevice = 0)
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_Open", "int" $iDevice, "ptr*", 0)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0], 0, $result[2])
    EndFunc
    Func FT_Close($ftHandle)
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_Close", "ptr", $ftHandle)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0], 0, $result[0]=0)
    EndFunc
    Func FT_ClrRts($ftHandle)
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_ClrRts", "ptr", $ftHandle)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0], 0, $result[0]=0)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Beispiel:
    $hDevice = FT_Open()
    FT_ClrRts($hDevice)
    FT_Close($hDevice)

    [/autoit]
  • Aslo bis jetz geht nichst. Leigt es evtl. daran das du im 1. Spolier was vergessen hast oder idt das ", _" mit absicht da?
    Hab nämlich test weiße mal deins verwendet.

    Michi26206

  • Nö, das ist durch Search&Replace aus den c++ headern entstanden. Die Zeile muss so sein;

    [autoit]

    $FT_DEVICE_LIST_NOT_READY

    [/autoit]


    Und zur Spannung: so wie ich die ganzen Infos sehe, wird die umgepolt: Also einmal hast du + 4,6 nach dem Aufruf solltest du -4,6 oder anders rum haben.
    Dann noch: Was kommt eigentlich bei FT_open raus

  • Hi,

    bei FT_Open kommt 0x01762190. Die Spannung musst normal komplett weg sein und da sein. Aber sie wird nich einmal umgepolt.

    Michi26206

    edit: hast du ts?

  • Das 0x... ist OK, wenn da ox00000000 wäre, hättest du einen Fehler. Hast du noch andre USB-Geräte, die die DLL findet?
    Hol dir mal die Anzahl:

    [autoit]

    Global COnst $FT_LIST_NUMBER_ONLY = 0x80000000
    Func FT_GetDevicesCount()
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_ListDevices", "dword*", 0, "ptr", 0, "dword", $FT_LIST_NUMBER_ONLY)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0], 0, $result[1])
    EndFunc
    MsgBox(0,"", FT_GetDevicesCount() )

    [/autoit]
  • Nee, mein Mikro ist kaputt^^
    Aber ich hab auch keine Idee mehr.
    Höchstens, der Ausgang steht bereits auf Clr. dann musst du natürlich FT_SetRts verwenden, um eine Änderung zu bewirken.
    oder, als allerletzes: misst du an den richtitgen Anschlüssen?

  • Hi,

    jetzt gehts. Ich werd jetzt mal die LED hin löten. Bin ja mal gespannt.

    Melde mich nacher.

    Michi26206

    edit:

    LED mit nem >>> 5,6 k Ohm <<< Wiederstand hingelötet und es geht. Ist echt cool ;) Danke @ all und vorallem an prog@ndy

    5 Mal editiert, zuletzt von Michi26206 (14. März 2009 um 09:22)