#!/usr/bin/python3 # -*- coding: utf-8 -*- # Programa desenvolupat per en Jordi Binefa ( https://twitter.com/JordiBinefa ) el 12 de desembre de 2020 # a partir de https://en.scratch-wiki.info/wiki/Communicating_to_Scratch_via_Python # i https://diyprojects.io/python-library-evdev-raspberry-pi-use-gamepad-diy-projects-servomotor-games/ from evdev import InputDevice, categorize, ecodes import sys import socket HOST = 'localhost' PORT = 42001 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) def sendCMD(cmd): sock.send(len(cmd).to_bytes(4, 'big')) sock.send(bytes(cmd, 'UTF-8')) # print ('Nombre d\'arguments:', len(sys.argv), 'arguments.') # print ('Llista d\'arguments:', str(sys.argv)) if len(sys.argv) == 2: # print("Segon argument: %s" % sys.argv[1]) dispositiu = '/dev/input/event' + sys.argv[1] else: dispositiu = '/dev/input/event18' # Canvieu 18 pel vostre nĂºmero d'esdeveniment #cree un objet gamepad | creates object gamepad # gamepad = InputDevice('/dev/input/event18') gamepad = InputDevice(dispositiu) #affiche la liste des device connectes | prints out device info at start print(gamepad) aBtn = 289 bBtn = 290 xBtn = 288 yBtn = 291 lBtn = 292 rBtn = 293 selBtn = 296 staBtn = 297 llistaOrdres = ["","joyX","joyB","joyA","joyY","joyL","joyR","joySelect","joyStart","joyDeixatAnar","joyEsquerra","joyDreta","joyCentre","joyAmunt","joyAvall","joyCentre"] for ordreBucle in llistaOrdres: sendCMD('broadcast "%s"' % ordreBucle) # ordre = "" ordre = llistaOrdres[0] #affiche les codes interceptes | display codes for event in gamepad.read_loop(): #Boutons | buttons if event.type == ecodes.EV_KEY: #print(event) if event.value == 1: if event.code == xBtn: #ordre = "joyX" ordre = llistaOrdres[1] # print("joyX") elif event.code == bBtn: # ordre = "joyB" ordre = llistaOrdres[2] # print("joyB") elif event.code == aBtn: # ordre = "joyA" ordre = llistaOrdres[3] # print("joyA") elif event.code == yBtn: # ordre = "joyY" ordre = llistaOrdres[4] # print("joyY") elif event.code == lBtn: # ordre = "joyL" ordre = llistaOrdres[5] # print("joyL") elif event.code == rBtn: # ordre = "joyR" ordre = llistaOrdres[6] # print("joyR") elif event.code == selBtn: # ordre = "joySelect" ordre = llistaOrdres[7] # print("joySelect") elif event.code == staBtn: # ordre = "joyStart" ordre = llistaOrdres[8] # print("joyStart") elif event.value == 0: # ordre = "joyDeixatAnar" ordre = llistaOrdres[9] # print("joyDeixatAnar") print(ordre) sendCMD('broadcast "%s"' % ordre) #Gamepad analogique | Analog gamepad elif event.type == ecodes.EV_ABS: absevent = categorize(event) #print ecodes.bytype[absevent.event.type][absevent.event.code], absevent.event.value if ecodes.bytype[absevent.event.type][absevent.event.code] == "ABS_X": if absevent.event.value == 0: # ordre = "joyEsquerra" ordre = llistaOrdres[10] # print("joyEsquerra") elif absevent.event.value == 255: # ordre = "joyDreta" ordre = llistaOrdres[11] # print("joyDreta") elif absevent.event.value == 127: # ordre = "joyCentre" ordre = llistaOrdres[12] # print("joyCentre") elif ecodes.bytype[absevent.event.type][absevent.event.code] == "ABS_Y": if absevent.event.value == 0: # ordre = "joyAmunt" ordre = llistaOrdres[13] # print("joyAmunt") elif absevent.event.value == 255: # ordre = "joyAvall" ordre = llistaOrdres[14] # print("joyAvall") elif absevent.event.value == 127: # ordre = "joyCentre" ordre = llistaOrdres[15] # print("joyCentre") print(ordre) sendCMD('broadcast "%s"' % ordre)