import serial # import module for serial communcation import pyautogui # import module for keyboard/mouse control import io # import module to to use universal newline mode import time alive = True # open Serial Port 5 ser = serial.Serial() ser.baudrate = 9600 # baud rate ser.port = 'COM5'# set port ser.timeout = 0.1 # set timeout in seconds ser.open() # open serial communication print('COM 5 Open: ', ser.is_open) sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) ser.flush() # wait until all data is written pyautogui.FAILSAFE = False # set failsafe for manual exit width, height = pyautogui.size() # set size of screen print('Press Ctrl-C to quit.') pyautogui.moveTo(960, 540); # set mouse to middle flap_up_prev = 0 flap_down_prev = 0 pause_prev = 0 landing_gear_prev = 0 throttle_prev = 0 rudder_prev = 0 xn_prev = 0 yn_prev = 0 brake_left_prev = 0; brake_right_prev = 0; count = 0 while (alive): # kill switch not asserted line = sio.readline() data = line.split() # flaps up if int(data[2])!=flap_up_prev: pyautogui.typewrite('['); flap_up_prev = int(data[2]) # flaps down if int(data[1])!=flap_down_prev: pyautogui.typewrite(']') flap_down_prev = int(data[1]) # kill switch if int(data[3]): pyautogui.press('esc') ser.close() print('COM 5 Open: ', ser.is_open) alive = False # pause button if int(data[4])!=pause_prev: pyautogui.press('space') pyautogui.press('c') pause_prev = int(data[4]) # landing gear if int(data[5])!=landing_gear_prev: pyautogui.press('g') landing_gear_prev = int(data[5]) # left brake if int(data[10])!=brake_left_prev: if int(data[10])!=0: pyautogui.keyDown(',') else: pyautogui.keyUp(',') brake_left_prev = int(data[10]) # right brake if int(data[11])!=brake_right_prev: if int(data[11])!=0: pyautogui.keyDown('.') else: pyautogui.keyUp('.') brake_right_prev = int(data[11]) # throttle throttle = int(int(data[6])/9) if (throttle-throttle_prev)>0: pyautogui.press('c') for w in range(abs(throttle-throttle_prev)): pyautogui.keyDown('pageup') pyautogui.keyUp('pageup') if (throttle-throttle_prev)<0: for x in range(abs(throttle-throttle_prev)): pyautogui.keyDown('pagedown') pyautogui.keyUp('pagedown') throttle_prev = throttle # roll, pitch x = int(data[7]) y = int(data[8]) if x>90: x = 90 if x<-90: x = -90 if y>90: y = 90 if x<-90: x = -90 xn = y*10+900 yn = -1*x*6+540 if(count == 0): pyautogui.moveTo(xn, yn) count = count +1 if count == 8: count = 0 # rudder measurements if count == 2: rudder = int(int(data[9])/25) if (rudder-rudder_prev)<0: for y in range(abs(rudder-rudder_prev)): pyautogui.keyDown('shift') pyautogui.keyDown('left') pyautogui.keyUp('left') pyautogui.keyUp('shift') if (rudder-rudder_prev)>0: for z in range(abs(rudder-rudder_prev)): pyautogui.keyDown('shift') pyautogui.keyDown('right') pyautogui.keyUp('right') pyautogui.keyUp('shift') rudder_prev = rudder