Python / C++ 获取Xbox按键

您所在的位置:网站首页 怎么检测xbox手柄按键 Python / C++ 获取Xbox按键

Python / C++ 获取Xbox按键

2024-07-13 21:53| 来源: 网络整理| 查看: 265

Python下获取Xbox按键代码,首先测试

ls /dev/input/js0

若没有,查看硬件连接或修改内核驱动。

import pygame # Define some colors BLACK = ( 0, 0, 0) WHITE = ( 255, 255, 255) # This is a simple class that will help us print to the screen # It has nothing to do with the joysticks, just outputting the # information. class TextPrint: def __init__(self): self.reset() self.font = pygame.font.Font(None, 20) def print(self, screen, textString): textBitmap = self.font.render(textString, True, BLACK) screen.blit(textBitmap, [self.x, self.y]) self.y += self.line_height def reset(self): self.x = 10 self.y = 10 self.line_height = 15 def indent(self): self.x += 10 def unindent(self): self.x -= 10 pygame.init() # Set the width and height of the screen [width,height] size = [500, 700] screen = pygame.display.set_mode(size) pygame.display.set_caption("My Game") #Loop until the user clicks the close button. done = False # Used to manage how fast the screen updates clock = pygame.time.Clock() # Initialize the joysticks pygame.joystick.init() # Get ready to print textPrint = TextPrint() # -------- Main Program Loop ----------- while done==False: # EVENT PROCESSING STEP for event in pygame.event.get(): # User did something if event.type == pygame.QUIT: # If user clicked close done=True # Flag that we are done so we exit this loop # Possible joystick actions: JOYAXISMOTION JOYBALLMOTION JOYBUTTONDOWN JOYBUTTONUP JOYHATMOTION # if event.type == pygame.JOYBUTTONDOWN: # print("Joystick button pressed.") # if event.type == pygame.JOYBUTTONUP: # print("Joystick button released.") # DRAWING STEP # First, clear the screen to white. Don't put other drawing commands # above this, or they will be erased with this command. screen.fill(WHITE) textPrint.reset() # Get count of joysticks joystick_count = pygame.joystick.get_count() #textPrint.print(screen, "Number of joysticks: {}".format(joystick_count) ) textPrint.indent() # For each joystick: for i in range(joystick_count): joystick = pygame.joystick.Joystick(i) joystick.init() # textPrint.print(screen, "Joystick {}".format(i) ) #textPrint.indent() # Get the name from the OS for the controller/joystick #name = joystick.get_name() #textPrint.print(screen, "Joystick name: {}".format(name) ) # Usually axis run in pairs, up/down for one, and left/right for # the other. axes = joystick.get_numaxes() #textPrint.print(screen, "Number of axes: {}".format(axes) ) #textPrint.indent() for i in range( axes ): axis = joystick.get_axis( i ) textPrint.print(screen, "Axis {} value: {:>6.3f}".format(i, axis) ) if i==1 and axis== -1.0: print("Left up",axis) if i==1 and axis > 0.3: print("Left down",axis) if i==0 and axis== -1: print("Left left",axis) if i==0 and axis > 0.3: print("Left right",axis) if i==4 and axis== -1.0: print("Right up",axis) if i==4 and axis > 0.3: print("Right down",axis) if i==3 and axis== -1: print("Right left",axis) if i==3 and axis > 0.3: print("Right right",axis) if i==2 and axis > 0.3: print("LT",axis) if i==5 and axis > 0.3: print("RT",axis) textPrint.unindent() buttons = joystick.get_numbuttons() textPrint.print(screen, "Number of buttons: {}".format(buttons) ) textPrint.indent() for i in range( buttons ): button = joystick.get_button( i ) textPrint.print(screen, "Button {:>2} value: {}".format(i,button) ) if i==0 and button ==1: print("A") if i==1 and button ==1: print("B") if i==2 and button ==1: print("X") if i==3 and button ==1: print("Y") if i==4 and button ==1: print("LB") if i==5 and button ==1: print("RB") if i==6 and button ==1: print("BACK") if i==7 and button ==1: print("START") if i==8 and button ==1: print("Logitech") if i==9 and button ==1: print("Left GA") if i==10 and button ==1: print("Right GA") textPrint.unindent() # Hat switch. All or nothing for direction, not like joysticks. # Value comes back in an array. hats = joystick.get_numhats() textPrint.print(screen, "Number of hats: {}".format(hats) ) textPrint.indent() for i in range( hats ): hat = joystick.get_hat( i ) textPrint.print(screen, "Hat {} value: {}".format(i, str(hat)) ) if hat==(1,0) : print("FX right") if hat==(-1,0) : print("FX left") if hat==(0,1): print("FX up") if hat==(0,-1): print("FX down") textPrint.unindent() textPrint.unindent() # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT # Go ahead and update the screen with what we've drawn. pygame.display.flip() # Limit to 20 frames per second clock.tick(20) # Close the window and quit. # If you forget this line, the program will 'hang' # on exit if running from IDLE. pygame.quit ()

C++ 下获取Xbox键值

首先安装必要的库文件

sudo apt-get install joystick sudo apt-get isntall xboxdrv

然后测试/dev/input 有无js0 

键值获取代码如下:

#include #include #include #include #include #include #include #include #include #define XBOX_TYPE_BUTTON 0x01 #define XBOX_TYPE_AXIS 0x02 #define XBOX_BUTTON_A 0x00 #define XBOX_BUTTON_B 0x01 #define XBOX_BUTTON_X 0x02 #define XBOX_BUTTON_Y 0x03 #define XBOX_BUTTON_LB 0x04 #define XBOX_BUTTON_RB 0x05 #define XBOX_BUTTON_START 0x06 #define XBOX_BUTTON_BACK 0x07 #define XBOX_BUTTON_HOME 0x08 #define XBOX_BUTTON_LO 0x09 /* 左摇杆按键 */ #define XBOX_BUTTON_RO 0x0a /* 右摇杆按键 */ #define XBOX_BUTTON_ON 0x01 #define XBOX_BUTTON_OFF 0x00 #define XBOX_AXIS_LX 0x00 /* 左摇杆X轴 */ #define XBOX_AXIS_LY 0x01 /* 左摇杆Y轴 */ #define XBOX_AXIS_RX 0x03 /* 右摇杆X轴 */ #define XBOX_AXIS_RY 0x04 /* 右摇杆Y轴 */ #define XBOX_AXIS_LT 0x02 #define XBOX_AXIS_RT 0x05 #define XBOX_AXIS_XX 0x06 /* 方向键X轴 */ #define XBOX_AXIS_YY 0x07 /* 方向键Y轴 */ #define XBOX_AXIS_VAL_UP -32767 #define XBOX_AXIS_VAL_DOWN 32767 #define XBOX_AXIS_VAL_LEFT -32767 #define XBOX_AXIS_VAL_RIGHT 32767 #define XBOX_AXIS_VAL_MIN -32767 #define XBOX_AXIS_VAL_MAX 32767 #define XBOX_AXIS_VAL_MID 0x00 typedef struct xbox_map { int time; int a; int b; int x; int y; int lb; int rb; int start; int back; int home; int lo; int ro; int lx; int ly; int rx; int ry; int lt; int rt; int xx; int yy; }xbox_map_t; int xbox_open(char *file_name) { int xbox_fd; xbox_fd = open(file_name, O_RDONLY); if (xbox_fd < 0) { perror("open"); return -1; } return xbox_fd; } int xbox_map_read(int xbox_fd, xbox_map_t *map) { int len, type, number, value; struct js_event js; len = read(xbox_fd, &js, sizeof(struct js_event)); if (len < 0) { perror("read"); return -1; } type = js.type; number = js.number; value = js.value; map->time = js.time; if (type == JS_EVENT_BUTTON) { switch (number) { case XBOX_BUTTON_A: map->a = value; break; case XBOX_BUTTON_B: map->b = value; break; case XBOX_BUTTON_X: map->x = value; break; case XBOX_BUTTON_Y: map->y = value; break; case XBOX_BUTTON_LB: map->lb = value; break; case XBOX_BUTTON_RB: map->rb = value; break; case XBOX_BUTTON_START: map->start = value; break; case XBOX_BUTTON_BACK: map->back = value; break; case XBOX_BUTTON_HOME: map->home = value; break; case XBOX_BUTTON_LO: map->lo = value; break; case XBOX_BUTTON_RO: map->ro = value; break; default: break; } } else if (type == JS_EVENT_AXIS) { switch(number) { case XBOX_AXIS_LX: map->lx = value; break; case XBOX_AXIS_LY: map->ly = value; break; case XBOX_AXIS_RX: map->rx = value; break; case XBOX_AXIS_RY: map->ry = value; break; case XBOX_AXIS_LT: map->lt = value; break; case XBOX_AXIS_RT: map->rt = value; break; case XBOX_AXIS_XX: map->xx = value; break; case XBOX_AXIS_YY: map->yy = value; break; default: break; } } else { /* Init do nothing */ } return len; } void xbox_close(int xbox_fd) { close(xbox_fd); return; } int main(void) { int xbox_fd ; xbox_map_t map; int len, type; int axis_value, button_value; int number_of_axis, number_of_buttons ; memset(&map, 0, sizeof(xbox_map_t)); xbox_fd = xbox_open("/dev/input/js0"); if(xbox_fd < 0) { return -1; } while(1) { len = xbox_map_read(xbox_fd, &map); if (len < 0) { usleep(10*1000); continue; } printf("\rTime:%8d A:%d B:%d X:%d Y:%d LB:%d RB:%d start:%d back:%d home:%d LO:%d RO:%d XX:%-6d YY:%-6d LX:%-6d LY:%-6d RX:%-6d RY:%-6d LT:%-6d RT:%-6d", map.time, map.a, map.b, map.x, map.y, map.lb, map.rb, map.start, map.back, map.home, map.lo, map.ro, map.xx, map.yy, map.lx, map.ly, map.rx, map.ry, map.lt, map.rt); fflush(stdout); } xbox_close(xbox_fd); return 0; }

参考博文https://blog.csdn.net/xingqilui126com/article/details/52075823



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3