-
IT café
Ú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
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.
-
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
● olvasd el a téma összefoglalót!
- Intel Core i5-7600 processzor 6M gyorsítótár, akár 4,10 GHz
- Lenovo ThinkPad L14 Gen1 L14 Gen2 GYÁRI billentyűzet. ÚJ BONTATLAN!
- 512GB Micron 2400 NVMe PCIe x4 (2280) - 2db
- ASUS Z170-E alaplap,dobozában,I/O shielddel,tökéletes működéssel!
- Lenovo ThinkPad T480s T490 E480 E490 L480 L380 L390 billentyűzet. ÚJ BONTATLAN!