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