Tema: Q: windows, linksmakočiai ir Python
Autorius: Grzegorz Brzęczyszczykiewicz
Data: 2020-12-08 00:59:54
Laba,
škias užsiimu pornografija. Raildriver pultui nėra noro leisti €€€,
noriu pasidaryti savo.
Joystick'as - gimbalai ir Arduino Pro Micro su HID sketch'u.
windows+python yra 2 joystick'o klausinėjimo būdai: pyGame ir "gimtasis"
windows'ų, per winmm.dll
[https://stackoverflow.com/questions/60309652/how-to-get-usb-controller-gamepad-to-work-with-python]
Pirmas būdas, per pyGame, manęs nedžiugina, nes pyGame langas turi būti
fokuse. Man taip netinka, nes Ui yra kitų mygtukų. Bet mano nukopijuotas
kodas ten veikia [1 pav].
Antras būdas pas mane veikia gretimame lange, python'as sėkmingai
raportuoja reikšmes, bet pyGame langas jų negauna arba nenusiunčia.
pyGame atsigauna kai jame pajudinį pelę, kas man irgi netinka [2 pav]
Amžinas klausimas: ką daryti?
a) čia pyGame bajeriukai, susitaikyk su tuo
b) ašių apklausą ir nustatymą išnešti į atskirą thread'ą
c) c# ?
c1) ?
Python todėl kad:
a) vienas žmogus parašė wraper'į raildriver.dll bibliotekai
[https://github.com/piotrkilczuk/py-raildriver]
b) Revit pradėjo draugauti su Python
c) ką tik teko trumpai susipažinti su np ir matplotlib
d) kažkur ten ritasi pasaulis: micropython ant ESP32
e)
Kodas - elementarus. 'useJoystickPyGame' - bool, linksmakotis dirba arba
per pyGame, arba pee winmm.dll.
Mano logika sako, kad kol neišlipau iš 'for event in
pygame.event.get():', kodas turi būti vykdomas per 'else: axes[0] =
cJoystick.get_axis(0) ...' ir ašių pozicija turi būti atnaujinama.
Gretimo lango python'o koda be paliovos rašo 'print("Axes X:{} Y:{},
Z:{}".format(cJoystick.get_axis(0), cJoystick.get_axis(1),
cJoystick.get_axis(2)))'
Reikiamas 'winmm.dll' kodo funkcijas prirašiau pyGame stilium, kad
nesukti galvos.
Kodo gabalas:
while running:
pygame.event.pump()
event = pygame.event.wait()
surface.fill((0,0,0))
position = [10, 20]
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if useJoystickPyGame:
if event.type == pygame.JOYAXISMOTION:
e = event.dict
axes[e['axis']] = e['value']
else:
axes[0] = cJoystick.get_axis(0)
axes[1] = cJoystick.get_axis(1)
image = font.render('Joystick name: ' + cJoystick.get_name(), 1,
(180,200,180))
--
Grzegorz
Chrząszczyrzewoszyce, powiat Łękołody