Im building my own footpedal for my pc and got it working more or less. I can send the he code so it acts as a keyboard but I want it to display as a FOOTPEDAL1 .. 2 .. 3 .. 4. I downloaded this code which has 16 buttons which are calles GAMEPAD1 .. 2...
First problem: The code just outputs every second a GAMEPAD1 then counting up to 16 and starting again. But I want to set FOOTPEDAL1 with the GP0 pin.
Second problem: The code names it GAMEPAD1... but I want it FOOTPEDAL1...
This is proof that it outputs a GAMEPAD key but a random
Here is the boot code:
import usb_hid
# This is only one example of a gamepad descriptor, and may not suit your needs.
GAMEPAD_REPORT_DESCRIPTOR = bytes((
0x05, 0x01, # Usage Page (Generic Desktop Ctrls)
0x09, 0x05, # Usage (Game Pad)
0xA1, 0x01, # Collection (Application)
0x85, 0x04, # Report ID (4)
0x05, 0x09, # Usage Page (Button)
0x19, 0x01, # Usage Minimum (Button 1)
0x29, 0x10, # Usage Maximum (Button 16)
0x15, 0x00, # Logical Minimum (0)
0x25, 0x01, # Logical Maximum (1)
0x75, 0x01, # Report Size (1)
0x95, 0x10, # Report Count (16) ## 2 bytes
0x81, 0x02, # Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, # End Collection ## total 2 bytes
))
gamepad = usb_hid.Device(
report_descriptor=GAMEPAD_REPORT_DESCRIPTOR,
usage_page=0x01, # Generic Desktop Control ## Must match Usage Page above!
usage=0x05, # Gamepad ## Must match Usage above!
report_ids=(4,), # Descriptor uses report ID 4. ## Must match Report ID above!
in_report_lengths=(2,), # This gamepad sends 2 bytes in its report. ## Must match number of bytes above!
out_report_lengths=(0,), # It does not receive any reports.
)
usb_hid.enable(
(usb_hid.Device.KEYBOARD,
usb_hid.Device.MOUSE,
usb_hid.Device.CONSUMER_CONTROL,
gamepad)
)
And here is the main code:
import time
import struct
import usb_hid
import adafruit_hid
gamepad_device = adafruit_hid.find_device(usb_hid.devices, usage_page=0x1, usage=0x05)
print("gamepad_device:",gamepad_device)
def send_gamepad_report(button_state):
report = bytearray(2) ## must be same size as specified in HID Report Descriptor in boot.py
#report_id = 4 ## must match what's in HID Report Descriptor in boot.py
struct.pack_into(
"<H", # little endian, one 2-byte value
report,
0,
button_state
)
print(["%02x" % x for x in report])
gamepad_device.send_report(report)
# utility to help us set & clear bits in the button_state
def set_bit(v,i):
v |= (1 << i)
return v
def clr_bit(v,i):
v &= ~(1 << i)
return v
button_state = 0x00 # holds the state of our buttons
button_num = 0 # which button are we current toggling
# while True:
print("pushing button ", (button_num+1)) # human buttons start at one not zero
# push button
button_state = set_bit(button_state, button_num)
send_gamepad_report(button_state)
time.sleep(1)
print("releasing button ", (button_num+1)) # human buttons start at one not zero
# release button
button_state = clr_bit(button_state, button_num)
send_gamepad_report(button_state)
time.sleep(1)
# go to next button
button_num = (button_num+1) % 16
I would be very happy to get a response!
It gives out all GAMEPAD from 1 to 16. It's counting 1 up every second. As soon as I connect a 3.3V pin to any GP pin, it outputs the current GAMEPAD(number).