DIY Driving Simulator (10 / 12 steg)
Steg 10: Programmering (Python)
importera följetong
importera codecs
importera ctypes
Importera tid
från att importera sömn
SendInput = ctypes.windll.user32.SendInput
PUL = ctypes. POINTER(ctypes.c_ulong)
klass KeyBdInput(ctypes. Strukturera):
_fields_ = [("sydde", ctypes.c_ushort),
("wScan", ctypes.c_ushort),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", PUL)]
klass HardwareInput(ctypes. Strukturera):
_fields_ = [("uMsg", ctypes.c_ulong),
("wParamL", ctypes.c_short),
("wParamH", ctypes.c_ushort)]
klass MouseInput(ctypes. Strukturera):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time",ctypes.c_ulong),
("dwExtraInfo", PUL)]
klass Input_I(ctypes. Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("Hej", HardwareInput)]
klass Input (ctypes. Strukturera):
_fields_ = [("typ", ctypes.c_ulong),
("ii", Input_I)]
def PressKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.KI = KeyBdInput (hexKeyCode, 0x48, 0, 0, ctypes.pointer(extra))
x = Input (ctypes.c_ulong(1), ii_)
ctypes.windll.user32.SendInput (1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.KI = KeyBdInput (hexKeyCode, 0x48, 0x0002, 0, ctypes.pointer(extra))
x = Input (ctypes.c_ulong(1), ii_)
ctypes.windll.user32.SendInput (1, ctypes.pointer(x), ctypes.sizeof(x))
def PressW():
PressKey(0x57) #W
def ReleaseW():
ReleaseKey(0x57) #W
def PressA():
PressKey(0x41) #A
def ReleaseA():
ReleaseKey(0x41) #A
def PressS():
PressKey(0x53) #S
def ReleaseS():
ReleaseKey(0x53) #S
def PressD():
PressKey(0x44) #D
def ReleaseD():
ReleaseKey(0x44) #D
Port = "COM6"
ser = följetong. Serial (port, 9600, timeout = 0)
samtidigt sant:
#data = ser.read(9999)
linje = ser.readline()
Om raden:
skriva ut ("Got:", linje)
Om raden == b '0\r\n':
Print('W_UP')
PressW()
Elif linje == b '1\r\n':
Print('W_DOWN')
ReleaseW()
Om raden == b '2\r\n':
Print('S_UP')
PressS()
Elif linje == b '3\r\n':
Print('S_DOWN')
ReleaseS()
Om raden == b '4\r\n':
Print('A_UP')
PressA()
Elif linje == b '5\r\n':
Print('A_DOWN')
ReleaseA()
Om raden == b '6\r\n':
Print('D_UP')
PressD()
Elif linje == b '7\r\n':
Print('D_DOWN')
ReleaseD()
Sleep(0.0125)
Print('0')
ser.Close()