Keresés

Új hozzászólás Aktív témák

  • aviator

    tag

    Sziasztok!

    A kérdésem nem feltétlen szoftver, inkább hardverfejlesztéssel kapcsolatos ezért elnézést, ha rossz helyre írom.

    A kérdés az lenne, hogy hogyan oldom meg azt, hogy egy PC-től teljesen független nyomógomb, vagy kapcsoló hatására a PC-n valami történjen. Addig eljutottam, hogy kell hozzá egy programozható eszköz (PIC, Arduino, stb) és végülis az fog a PC-vel kommunikálni, de azt nem tudom, hogy hogyan kellene megoldani magát a kommunikációt, illetve hogy ezt én Windows-ban hogyan fogom észlelni. Az a gyanúm, hogy egy programot kell majd írni ami Windows alatt fut és kommunikál az Arduinoval. Szóval ezt kéne tisztába tenni, mert úgy érzem ebben el vagyok veszve.

    Nagyon röviden megfogalmazva szeretnék (majd idővel) létrehozni egy olyan sok gombos eszközt aminek a gombnyomásaira különböző funkciókat tudok tenni.

    Segítségként tökéletes egy könyv, leírás, oktató video (sorozat), csak annyira alap amit szeretnék tudni, hogy nem tudok hogy rákeresni.

    Köszönöm ha segítetek.

  • aviator

    tag

    válasz dabadab #12406 üzenetére

    Köszönöm a válaszokat.

    "A kérdés az, hogy ennek mennyire kell különböznie egy tök sima billentyűzettől?"

    A kívánt funkciók megvalósításának teszteléséhez valóban nem kell több egy billentyűzetnél, a "hardver" végső formájában azonban külső nyomógombokból állna.

    Ha billentyűzetet belezek ki akkor jól sejtem, hogy a gombok billentyű leütéseknek (karaktereknek) fognak megfelelni? Nem lesz konfliktus a másik (már üzemben lévő) billentyűzettel, illetve azokkal a funkciókkal amik már hozzá vannak rendelve billentyűhöz?

    A játékvezérlők, joystick-ok gamepad-ok hogy oldják meg ezt a kérdést?

  • aviator

    tag

    válasz Jim Tonic #12411 üzenetére

    Én is ebbe az irányba mennék el, Arduinot értem is nagyjából a PC-vel való oda-vissza kommunikációval vagyok nagy gondban, nem is tudom hogy álljak neki.

  • aviator

    tag

    válasz tboy93 #12415 üzenetére

    Ez szimpatikusnak tűnik, az előző válaszodat nem is láttam, de köszönöm kipróbálom.

  • aviator

    tag

    Sziasztok,

    Egy Win32-es projekt jelentős részét kellene átlátnom, megértenem, majd utána a saját igényeimnek megfelelően bővíteni. Jelenleg ott tartok a dologgal, hogy van egy exe fájlom, és megvan hozzá a forráskód. Az exe fájl szépen lefut ahogy kell, viszont ha a forráskódját beillesztem az editorba és megpróbálom futtatni, akkor elindul ugyan, de egy, a forráskódban definiált hibaüzenetet kapok. Visszafejtve arra jutottam, hogy a hibaüzenetet azért kapom mert nem tud lefutni a CreateFilemapping függvény.

    A kódrészlet:

    #define MAX_SIZE 0x7F00 // Largest data (kept below 32k to avoid
          // any possible 16-bit sign problems)

    // create the file-mapping object
     m_hMap = CreateFileMapping(
         (HANDLE)0xFFFFFFFF, // use system paging file
         NULL,               // security
         PAGE_READWRITE,     // protection
         0, MAX_SIZE+256,       // size
         szName);            // name
     if ((m_hMap == 0) || (GetLastError() == ERROR_ALREADY_EXISTS))
     { *pdwResult = FSUIPC_ERR_MAP;
      FSUIPC_Close();
      return FALSE;
     }

    Az if-ben az első feltétel teljesül, tehát az m_hMap értéke marad a kezdeti nulla, azaz nem kap értéket a függvénytől, ezért íródik be az if-en belül a *pdwResult címre a hibaüzenet. Hiba nincs, a GetLastError() nullát ad vissza, ezt ellenőriztem.
    Az egész kódrészlet egy másik függvény része, ezért van return FALSE a végén.

    A kérdés, hogy mi lehet az oka annak, hogy nem fut le a CreateFileMapping függvény?

    Igazából most van dolgom először Win32-es programmal, a butaságok állításáért, kérdezéséért előre is elnézést.

    Köszönöm a segítséget. :R

  • aviator

    tag

    válasz dqdb #14263 üzenetére

    Ez volt a megoldás, köszönöm.

    Csak, hogy tanuljak: Mitől függ, hogy 32 bites, vagy 64 bites a kód?

  • aviator

    tag

    Sziasztok,
    Soros vonalon érkező adatot szeretnék excel táblázatban felhasználni ebben kérnék segítséget.
    Mivel még sosem dolgoztam ilyennel, nem akartam feltalálni a spanyol viaszt, ide vezetett a google: http://www.thescarms.com/vbasic/commio.aspx
    Ez egy elég jól használható modul, jönnek is szépen az adatok. Egy 10 karakteres stringet kell beolvasnom, a problémám az, hogy nem mindig van meg a 10 karakter, illetve néha több van, tehát bizonytalan az olvasás. A csatolt kódban a Do Loop-ban történik meg a string kivétele a soros bufferből, csak ezek szerint nem mindig a jó pillanatban. Próbáltam rákényszeríteni, hogy csak a 10 karakter hosszú olvasás esetén menjen tovább az első if-nél, megcsinálja, de néha sokáig tart, meg hát nem érzem túl elegánsnak.
    Kellene ide egy olyan megoldás, ami kiküszöböli ezt a problémát, de ha valakinek van működő kódja teljesen más alapokon az is tökéletes lenne.

    Private Sub CommandButton1_Click()

    Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
    Dim lngStatus As Long
    Dim strError As String
    Dim strData As String

    intPortID = 3 'Using COM3

    ' Initialize Communications
    lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), _
    "baud=9600 parity=N data=8 stop=1")

    If lngStatus <> 0 Then
    ' Handle error.
    lngStatus = CommGetError(strError)
    MsgBox "COM Error: " & strError
    End If

    lngStatus = CommSetLine(intPortID, LINE_RTS, True)
    lngStatus = CommSetLine(intPortID, LINE_DTR, True)

    ' Read maximum of 64 bytes from serial port.

    Do

    lngStatus = CommRead(intPortID, strData, 64)

    If lngStatus > 0 And (Len(strData) = 10) Then
    TextBox1.Text = strData
    TextBox2.Text = Len(strData)
    Exit Do
    End If

    If lngStatus < 0 Then
    lngStatus = CommGetError(strError)
    MsgBox "COM Error: " & strError
    Exit Do
    End If
    Loop

    lngStatus = CommSetLine(intPortID, LINE_RTS, False)
    lngStatus = CommSetLine(intPortID, LINE_DTR, False)

    ' Close communications.
    Call CommClose(intPortID)

    End Sub

    [ Szerkesztve ]

Új hozzászólás Aktív témák