I have a problem.I want to use keyboard instead of joystick, but the person who wrote the codes made this project for joystick. How can I change the joystick codes with the keyboard?
I have 3 files.Joystick,Keyboard,Datacollection.I want the datacollection file to have keyboard codes instead of joysticks codes.
This code for joystick
import pygame
from time import sleep
pygame.init()
controller = pygame.joystick.Joystick(0)
controller.init()
buttons = {'x':0,'o':0,'t':0,'s':0,
'L1':0,'R1':0,'L2':0,'R2':0,
'share':0,'options':0,
'axis1':0.,'axis2':0.,'axis3':0.,'axis4':0.}
axiss=[0.,0.,0.,0.,0.,0.]
def getJS(name=''):
global buttons
# retrieve any events ...
for event in pygame.event.get(): # Analog Sticks
if event.type == pygame.JOYAXISMOTION:
axiss[event.axis] = round(event.value,2)
elif event.type == pygame.JOYBUTTONDOWN: # When button pressed
#print(event.dict, event.joy, event.button, 'PRESSED')
for x,(key,val) in enumerate(buttons.items()):
if x<10:
if controller.get_button(x):buttons[key]=1
elif event.type == pygame.JOYBUTTONUP: # When button released
#print(event.dict, event.joy, event.button, 'released')
for x,(key,val) in enumerate(buttons.items()):
if x<10:
if event.button ==x:buttons[key]=0
# to remove element 2 since axis numbers are 0 1 3 4
buttons['axis1'],buttons['axis2'] ,buttons['axis3'] ,buttons['axis4'] = [axiss[0],axiss[1],axiss[3],axiss[4]]
if name == '':
return buttons
else:
return buttons[name]
def main():
#print(getJS()) # To get all values
#sleep(0.05)
print(getJS('share')) # To get a single value
sleep(0.05)
if __name__ == '__main__':
while True:
main()
This code for keyboard
import pygame
def init():
pygame.init()
win = pygame.display.set_mode((100,100))
def getKey(keyName):
ans = False
for eve in pygame.event.get():pass
keyInput = pygame.key.get_pressed()
myKey = getattr(pygame,'K_{}'.format(keyName))
if keyInput [myKey]:
ans = True
pygame.display.update()
return ans
def main():
if getKey('LEFT'):
print('Key Left was pressed')
if getKey('RIGHT'):
print('Key Right was pressed')
if __name__ == '__main__':
init()
while True:
main()
This code for Datacollection
import WebcamModule as wM
import DataCollectionModule as dcM
import JoyStickModule as jsM
import MotorModule as mM
import cv2
from time import sleep
maxThrottle = 0.25
motor = mM.Motor(2, 3, 4, 17, 22, 27)
record = 0
while True:
joyVal = jsM.getJS()
#print(joyVal)
steering = joyVal['axis1']
throttle = joyVal['o']*maxThrottle
if joyVal['share'] == 1:
if record ==0: print('Recording Started ...')
record +=1
sleep(0.300)
if record == 1:
img = wM.getImg(True,size=[240,120])
dcM.saveData(img,steering)
elif record == 2:
dcM.saveLog()
record = 0
motor.move(throttle,-steering)
cv2.waitKey(1)
question from:
https://stackoverflow.com/questions/65863504/writing-keyboard-codes-instead-of-joystick-codes-in-python