For me the problem has unforunately still not been solved even with the new patch.
My workaround currently is using the SimConnect interface via a python script.
The Buttons of the joystick peripherie works, only the axis are not responding.
Not ideal, but works. Configured to helicopter usage in a very basic manner.
Just dumping here the script for others to tryout as well.
import pygame
from SimConnect import *
from SimConnect import AircraftEvents
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time
Initialize joystick and SimConnect data
joystick_data = {
“aileron”: 0.0, # X-axis (Roll)
“elevator”: 0.0, # Y-axis (Pitch)
“rudder”: 0.0, # Pedals
“throttle”: 0.0 # Collective/Throttle
}
def read_joystick(joystick):
“”“Read joystick inputs and update the global joystick_data dictionary.”“”
pygame.event.pump() # Process Pygame events
joystick_data["aileron"] = joystick[1].get_axis(0) # Horizontal axis (roll)
joystick_data["elevator"] = joystick[1].get_axis(1) # Vertical axis (invert for pitch realism)
joystick_data["throttle"] = max(-0.9,min(joystick[2].get_axis(0),0.9)) # Normalize to 0.0 - 1.0
joystick_data["rudder"] = max(-0.9,min(joystick[2].get_axis(1),0.9)) # Normalize to 0.0 - 1.0
def update_plot(frame, joystick, ac):
“”“Update the plots with live joystick data.”“”
# Read joystick input
read_joystick(joystick)
ac.cyclic_roll_event(int(joystick_data["aileron"]*16383)) # Example: Slightly Right
# Control cyclic pitch (elevator)
# EVENT_ELEVATOR_SET (-16383 = Full Down, 16383 = Full Up)
ac.cyclic_pitch_event(int(joystick_data["elevator"]*16383)) # Example: Slightly Down
# Control pedals (yaw/rudder)
# EVENT_RUDDER_SET (-16383 = Full Left, 16383 = Full Right)
ac.pedals_event(int(joystick_data["rudder"]*16383*0.75)) # Example: Slightly Left
# Control collective (throttle)
# EVENT_AXIS_THROTTLE_SET (-16383 = Idle, 16383 = Full Power)
ac.collective_event(int(joystick_data["throttle"]*16383*0.75)) # Example: 75% Power
# Update X-Y plot for pitch (elevator) and roll (aileron)
xy_plot.set_offsets([joystick_data["aileron"], joystick_data["elevator"]])
# Update bar plots
bar_pedals[0].set_height(joystick_data["rudder"])
bar_throttle[0].set_height(joystick_data["throttle"])
# Update plot titles for live feedback
ax_xy.set_title(f"Pitch: {joystick_data['elevator']:.2f}, Roll: {joystick_data['aileron']:.2f}")
ax_pedals.set_title(f"Pedals (Rudder): {joystick_data['rudder']:.2f}")
ax_throttle.set_title(f"Throttle: {joystick_data['throttle']:.2f}")
def main():
# Initialize Pygame and Joystick
pygame.init()
pygame.joystick.init()
try:
# Connect to SimConnect
sm = SimConnect()
ac = AircraftEvents(sm)
ac.cyclic_roll_event = ac.find("AILERON_SET")
ac.cyclic_pitch_event = ac.find("ELEVATOR_SET")
ac.pedals_event = ac.find("RUDDER_SET")
ac.collective_event = ac.find("AXIS_THROTTLE_SET")
print("Connected to Microsoft Flight Simulator 2024!")
# Ensure a joystick is connected
if pygame.joystick.get_count() == 0:
print("No joystick connected. Please connect a joystick and try again.")
return
joystick = []
for i in range(pygame.joystick.get_count()):
joystick.append(pygame.joystick.Joystick(i)) # Use the first joystick
joystick[i].init()
print(f"Joystick detected: {joystick[i].get_name()}")
# Set up Matplotlib plots
global fig, ax_xy, ax_pedals, ax_throttle, xy_plot, bar_pedals, bar_throttle
fig, (ax_xy, ax_pedals, ax_throttle) = plt.subplots(3, 1, figsize=(2.5, 6))
#plt.subplots_adjust(hspace=0.5)
# X-Y Plot for pitch (elevator) and roll (aileron)
ax_xy.set_xlim(-1, 1)
ax_xy.set_ylim(-1, 1)
ax_xy.set_xlabel("Roll (Aileron)")
ax_xy.set_ylabel("Pitch (Elevator)")
ax_xy.grid(True)
xy_plot = ax_xy.scatter(0, 0, c="red", s=100)
# Bar plot for pedals (rudder)
ax_pedals.set_xlim(0, 1)
ax_pedals.set_ylim(-1, 1)
ax_pedals.set_xticks([])
ax_pedals.set_ylabel("Rudder")
ax_pedals.grid(True)
bar_pedals = ax_pedals.bar([0.5], [0], width=0.4, color="blue")
# Bar plot for throttle
ax_throttle.set_xlim(0, 1)
ax_throttle.set_ylim(0, 1)
ax_throttle.set_xticks([])
ax_throttle.set_ylabel("Throttle")
ax_throttle.grid(True)
bar_throttle = ax_throttle.bar([0.5], [0], width=0.4, color="green")
# Set up Matplotlib animation
ani = FuncAnimation(fig, update_plot, fargs=(joystick, ac), interval=10)
# Display plots
print("Displaying live plots... (Close the window to exit)")
plt.show()
except KeyboardInterrupt:
print("\nExiting...")
except Exception as e:
print(f"An error occurred: {e}")
finally:
# Ensure clean disconnection
pygame.quit()
if name == “main”:
main()